sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/basicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(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}(hhhhhhhNhNubah}(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}(hhhhhhhNhNubah}(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}(hhhhhhhNhNubah}(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.hhKYubah}(h]h ]h"]h$]h&]jj  add_permalinkuh1hsphinx_line_type declaratorhhhhhj hKYubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multilineuh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKXhhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhhhhhj hKYubeh}(h]h ](cmacroeh"]h$]h&]domainj,objtypej-desctypej-noindexuh1hhhhhhNhNubh paragraph)}(h``module_init (x)``h]hliteral)}(hj9h]hmodule_init (x)}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKZhhhhubh block_quote)}(hhh]j6)}(h!driver initialization entry pointh]h!driver initialization entry point}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKQhjSubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubh 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](j6)}(h**Parameters**h]hstrong)}(hjsh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKUhjmubhdefinition_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}(hhhjhhhNhNubah}(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.hhKRhjubh definition)}(hhh]j6)}(h:function to be run at kernel boot time or module insertionh]h:function to be run at kernel boot time or module insertion}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThjmubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKeubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj3hKeubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKdhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj3hKeubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhhhNhNubj6)}(h``module_exit (x)``h]j<)}(hjSh]hmodule_exit (x)}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjQubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKfhhhhubjR)}(hhh]j6)}(hdriver exit entry pointh]hdriver exit entry point}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK[hjiubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(h)function to be run when driver is removedh]h)function to be run when driver is removed}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]kah"]h$]h&]uh1j&hj"hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubhdesc_sig_space)}(h h]h }(hhhj:hhhNhNubah}(h]h ]wah"]h$]h&]uh1j8hj"hhhj7hMubh)}(h klp_modinfoh]h)}(hj h]h klp_modinfo}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj7hMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKghjhhubj)}(hhh]j6)}(h3ELF information preserved from the livepatch moduleh]h3ELF information preserved from the livepatch module}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhhhNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(h:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(h ELF headerh]h ELF header}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hSection header tableh]hSection header table}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubj)}(h4``secstrings`` String table for the section headers h](j)}(h``secstrings``h]j<)}(hjRh]h secstrings}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjLubj)}(hhh]j6)}(h$String table for the section headersh]h$String table for the section headers}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjubj)}(h)``symndx`` The symbol table section indexh](j)}(h ``symndx``h]j<)}(hjh]hsymndx}(hhhjhhhNhNubah}(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]j6)}(hThe symbol table section indexh]hThe symbol table section index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(htry_module_geth]h)}(htry_module_geth]htry_module_get}(hhhj 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}(hhhj)hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj%ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%ubh)}(hhh]h)}(hmoduleh]hmodule}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftype identifier reftargetjImodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jb ASTIdentifier)}j]j sbc.try_module_getasbuh1hhj%ubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%ubhdesc_sig_punctuation)}(h*h]h*}(hhhjhhhNhNubah}(h]h ]pah"]h$]h&]uh1j}hj%ubh)}(hmoduleh]hmodule}(hhhjhhhNhNubah}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubj)}(hhh]j6)}(h3take module refcount unless module is being removedh]h3take module refcount unless module is being removed}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(hthe module we should check forh]hthe module we should check for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj6)}(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.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj6)}(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\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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]j6)}(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.}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjpubah}(h]h ]h"]h$]h&]uh1jnhjkubjo)}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubah}(h]h ]h"]h$]h&]uh1jnhjkubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jihjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj6)}(hAReturns true if the reference count was successfully incremented.h]hAReturns true if the reference count was successfully incremented.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h module_puth]h)}(h module_puth]h module_put}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct module *module)h]j$)}(hstruct module *moduleh](j')}(hj*h]hstruct}(hhhj(hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj$ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh)}(hhh]h)}(hmoduleh]hmodule}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHmodnameN classnameNjajd)}jg]jj)}j]jsb c.module_putasbuh1hhj$ubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj~)}(hjh]h*}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$ubh)}(hmoduleh]hmodule}(hhhjhhhNhNubah}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubj)}(hhh]j6)}(h%release a reference count to a moduleh]h%release a reference count to a module}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(h2the module we should release a reference count forh]h2the module we should release a reference count for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj(h]h Description}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj6)}(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@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubeh}(h]driver-entry-and-exit-pointsah ]h"]driver entry and exit pointsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDriver device tableh]hDriver device table}(hjahj_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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKSubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKSubh)}(h usb_device_idh]h)}(hjh]h usb_device_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKSubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhKSubah}(h]jyah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj{hhubj)}(hhh]j6)}(h2identifies USB devices for probing and hotpluggingh]h2identifies USB devices for probing and hotplugging}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKRhjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhKSubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKVhjubj)}(hXdstruct 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]hXdstruct 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 ; };}(hhhj ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhjubj6)}(h **Members**h]jv)}(hj h]hMembers}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hj6 h]h match_flags}(hhhj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4 ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhj0 ubj)}(hhh]j6)}(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.}(hjQ hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKThjL ubah}(h]h ]h"]h$]h&]uh1jhj0 ubeh}(h]h ]h"]h$]h&]uh1jhjK 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<)}(hjp h]hidVendor}(hhhjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjn ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKZhjj ubj)}(hhh]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKYhj ubah}(h]h ]h"]h$]h&]uh1jhjj 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}(hhhj 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]j6)}(hVendor-assigned product ID.h]hVendor-assigned product ID.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj 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]j6)}(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.}(hj8 hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK_hj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 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<)}(hjW h]h bDeviceClass}(hhhjY hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjU ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKdhjQ ubj)}(hhh]j6)}(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.}(hjr hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKahjm ubah}(h]h ]h"]h$]h&]uh1jhjQ ubeh}(h]h ]h"]h$]h&]uh1jhjl hKdhj- ubj)}(hF``bDeviceSubClass`` Subclass of device; associated with bDeviceClass. h](j)}(h``bDeviceSubClass``h]j<)}(hj h]hbDeviceSubClass}(hhhj 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]j6)}(h1Subclass of device; associated with bDeviceClass.h]h1Subclass of device; associated with bDeviceClass.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(h1Protocol of device; associated with bDeviceClass.h]h1Protocol of device; associated with bDeviceClass.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj? 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.hhKkhj7 ubj)}(hhh]j6)}(h7Subclass of interface; associated with bInterfaceClass.h]h7Subclass of interface; associated with bInterfaceClass.}(hjX hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjR hKkhjS ubah}(h]h ]h"]h$]h&]uh1jhj7 ubeh}(h]h ]h"]h$]h&]uh1jhjR hKkhj- ubj)}(hO``bInterfaceProtocol`` Protocol of interface; associated with bInterfaceClass. h](j)}(h``bInterfaceProtocol``h]j<)}(hjv h]hbInterfaceProtocol}(hhhjx 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.hhKlhjp ubj)}(hhh]j6)}(h7Protocol of interface; associated with bInterfaceClass.h]h7Protocol of interface; associated with bInterfaceClass.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKlhj ubah}(h]h ]h"]h$]h&]uh1jhjp 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}(hhhj 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]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj 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]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hj, h]h Description}(hhhj. hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj* ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKuhj\hhubj6)}(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.}(hjD hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKshj\hhubj6)}(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.}(hjS hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKxhj\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)}(hjs h]hACPI_DEVICE_CLASS}(hhhj} hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy ubah}(h]h ](jjeh"]h$]h&]jj uh1hhju hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjq hhhj hKubah}(h]jl ah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhjn hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjn hhhj hKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j j3j j4uh1hhhhj\hNhNubj6)}(h"``ACPI_DEVICE_CLASS (_cls, _msk)``h]j<)}(hj h]hACPI_DEVICE_CLASS (_cls, _msk)}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj\hhubjR)}(hhh]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubah}(h]h ]h"]h$]h&]uh1jQhj\hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj 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]j6)}(h3the class, subclass, prog-if triple for this deviceh]h3the class, subclass, prog-if triple for this device}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj> 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.hhKhj6 ubj)}(hhh]j6)}(hthe class mask for this deviceh]hthe class mask for this device}(hjW hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQ hKhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjw h]h Description}(hhhjy hhhNhNubah}(h]h ]h"]h$]h&]uh1juhju ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMtubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hMtubh)}(hmdio_device_idh]h)}(hj h]hmdio_device_id}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMtubah}(h]j ah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj hhubj)}(hhh]j6)}(h)identifies PHY devices on an MDIO/MII bush]h)identifies PHY devices on an MDIO/MII bus}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMshj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMtubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMwhjubj)}(hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };h]hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };}(hhhj<ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMyhjubj6)}(h **Members**h]jv)}(hjMh]hMembers}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hjlh]hphy_id}(hhhjnhhhNhNubah}(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.hhMwhjfubj)}(hhh]j6)}(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(}(hThe result of (mdio_read(hjhhhNhNubh)}(h:c:type:`MII_PHYSID1`h]j<)}(hjh]h MII_PHYSID1}(hhhjhhhNhNubah}(h]h ](xrefj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocdriver-api/basics refdomainj,reftypetype refexplicitrefwarn c:parent_keyjd)}jg]sb reftarget MII_PHYSID1uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMuhjubh) << 16 | mdio_read(}(h) << 16 | mdio_read(hjhhhNhNubh)}(h:c:type:`MII_PHYSID2`h]j<)}(hjh]h MII_PHYSID2}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj MII_PHYSID2uh1hhjhMuhjubh)) & }(h)) & hjhhhNhNubjv)}(h**phy_id_mask**h]h phy_id_mask}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for this PHY type}(h for this PHY typehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjcubj)}(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<)}(hj h]h phy_id_mask}(hhhj hhhNhNubah}(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.hhMxhjubj)}(hhh]j6)}(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 }(h Defines the significant bits of hj"hhhNhNubjv)}(h **phy_id**h]hphy_id}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubhG. A value of 0 is used to terminate an array of struct mdio_device_id.}(hG. A value of 0 is used to terminate an array of struct mdio_device_id.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjcubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhjvhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjrhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrhhhjhMubh)}(hamba_idh]h)}(hjph]hamba_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjkhhubj)}(hhh]j6)}(h"identifies a device on an AMBA bush]h"identifies a device on an AMBA bus}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hj&h]hid}(hhhj(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.hBhMhj ubj)}(hhh]j6)}(h.The significant bits if the hardware device IDh]h.The significant bits if the hardware device ID}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(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<)}(hj_h]hmask}(hhhjahhhNhNubah}(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.hhMhjYubj)}(hhh]j6)}(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.}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubj)}(h)``data`` Private data used by the driver.h](j)}(h``data``h]j<)}(hjh]hdata}(hhhjhhhNhNubah}(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]j6)}(h Private data used by the driver.h]h Private data used by the driver.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jkhj\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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hmips_cdmm_device_idh]h)}(hjh]hmips_cdmm_device_id}(hhhjhhhNhNubah}(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&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(h#identifies devices in MIPS CDMM bush]h#identifies devices in MIPS CDMM bus}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhj\hNhNubjl)}(hw**Definition**:: struct mips_cdmm_device_id { __u8 type; }; **Members** ``type`` Device type identifier.h](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh:}(hjhjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjRubj)}(h.struct mips_cdmm_device_id { __u8 type; };h]h.struct mips_cdmm_device_id { __u8 type; };}(hhhjsubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjRubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjRubj)}(hhh]j)}(h ``type`` Device type identifier.h](j)}(h``type``h]j<)}(hjh]htype}(hhhjhhhNhNubah}(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]j6)}(hDevice type identifier.h]hDevice type identifier.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMubh)}(hmei_cl_device_idh]h)}(hjh]hmei_cl_device_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(hMEI client device identifierh]hMEI client device identifier}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jXj3jXj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh:}(hjhj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\ubj)}(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; };}(hhhj}ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\ubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\ubj)}(hhh](j)}(h``name`` helper name h](j)}(h``name``h]j<)}(hjh]hname}(hhhjhhhNhNubah}(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]j6)}(h helper nameh]h helper name}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``uuid`` client uuid h](j)}(h``uuid``h]j<)}(hjh]huuid}(hhhjhhhNhNubah}(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]j6)}(h client uuidh]h client uuid}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj!hhhNhNubah}(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]j6)}(hclient protocol versionh]hclient protocol version}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h/``driver_info`` information used by the driver.h](j)}(h``driver_info``h]j<)}(hjXh]h driver_info}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjRubj)}(hhh]j6)}(hinformation used by the driver.h]hinformation used by the driver.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj6)}(h-identifies mei client device by uuid and nameh]h-identifies mei client device by uuid and name}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h rio_device_idh]h)}(hjh]h rio_device_id}(hhhjhhhNhNubah}(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&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(hRIO device identifierh]hRIO device identifier}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]j1j,j2j4j3j4j4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh:}(hjhj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj8ubj)}(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; };}(hhhjYubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj8ubj6)}(h **Members**h]jv)}(hjjh]hMembers}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj8ubj)}(hhh](j)}(h``did`` RapidIO device ID h](j)}(h``did``h]j<)}(hjh]hdid}(hhhjhhhNhNubah}(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]j6)}(hRapidIO device IDh]hRapidIO device ID}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``vid`` RapidIO vendor ID h](j)}(h``vid``h]j<)}(hjh]hvid}(hhhjhhhNhNubah}(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]j6)}(hRapidIO vendor IDh]hRapidIO vendor ID}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``asm_did`` RapidIO assembly device ID h](j)}(h ``asm_did``h]j<)}(hjh]hasm_did}(hhhjhhhNhNubah}(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]j6)}(hRapidIO assembly device IDh]hRapidIO assembly device ID}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``asm_vid`` RapidIO assembly vendor IDh](j)}(h ``asm_vid``h]j<)}(hj4h]hasm_vid}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj.ubj)}(hhh]j6)}(hRapidIO assembly vendor IDh]hRapidIO assembly vendor ID}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hjwh]h Description}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hfsl_mc_device_idh]h)}(hjh]hfsl_mc_device_id}(hhhjhhhNhNubah}(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&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(hMC object device identifierh]hMC object device identifier}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(h**Definition**:: struct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; }; **Members** ``vendor`` vendor ID ``obj_type`` MC object typeh](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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]; };}(hhhj5ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubj6)}(h **Members**h]jv)}(hjFh]hMembers}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hjeh]hvendor}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj_ubj)}(hhh]j6)}(h vendor IDh]h vendor ID}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\ubj)}(h``obj_type`` MC object typeh](j)}(h ``obj_type``h]j<)}(hjh]hobj_type}(hhhjhhhNhNubah}(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]j6)}(hMC object typeh]hMC object type}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hj\hhubj6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj,hMubh)}(h tb_service_idh]h)}(hjh]h tb_service_id}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(hThunderbolt service identifiersh]hThunderbolt service identifiers}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj~ubj)}(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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj~ubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM!hj~ubj)}(hhh](j)}(h2``match_flags`` Flags used to match the structure h](j)}(h``match_flags``h]j<)}(hjh]h match_flags}(hhhjhhhNhNubah}(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]j6)}(h!Flags used to match the structureh]h!Flags used to match the structure}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj hhhNhNubah}(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]j6)}(h!Protocol key the service supportsh]h!Protocol key the service supports}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hjAh]h protocol_id}(hhhjChhhNhNubah}(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]j6)}(h Protocol id the service supportsh]h Protocol id the service supports}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubj)}(h-``protocol_version`` Version of the protocol h](j)}(h``protocol_version``h]j<)}(hjzh]hprotocol_version}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjtubj)}(hhh]j6)}(hVersion of the protocolh]hVersion of the protocol}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``protocol_revision`` Revision of the protocol software h](j)}(h``protocol_revision``h]j<)}(hjh]hprotocol_revision}(hhhjhhhNhNubah}(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]j6)}(h!Revision of the protocol softwareh]h!Revision of the protocol software}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hDriver specific datah]hDriver specific data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hj/h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj6)}(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.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhjmhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjihhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM2ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjihhhjzhM2ubh)}(htypec_device_idh]h)}(hjgh]htypec_device_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjzhM2ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhjzhM2ubah}(h]j`ah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM!hjbhhubj)}(hhh]j6)}(h%USB Type-C alternate mode identifiersh]h%USB Type-C alternate mode identifiers}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM1hjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhM2ubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM5hjubj)}(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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM7hjubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hjh]hsvid}(hhhjhhhNhNubah}(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.hhM3hjubj)}(hhh]j6)}(hStandard or Vendor IDh]hStandard or Vendor ID}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hM3hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM3hjubj)}(h``mode`` Mode index h](j)}(h``mode``h]j<)}(hjVh]hmode}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM4hjPubj)}(hhh]j6)}(h Mode indexh]h Mode index}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhM4hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM4hjubj)}(h$``driver_data`` Driver specific datah](j)}(h``driver_data``h]j<)}(hjh]h driver_data}(hhhjhhhNhNubah}(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.hhM4hjubj)}(hhh]j6)}(hDriver specific datah]hDriver specific data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM>ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM>ubh)}(htee_client_device_idh]h)}(hjh]htee_client_device_id}(hhhj hhhNhNubah}(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&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM;hjhhubj)}(hhh]j6)}(htee based device identifierh]htee based device identifier}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM=hj)hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jDj3jDj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh:}(hjhjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMAhjHubj)}(h1struct tee_client_device_id { uuid_t uuid; };h]h1struct tee_client_device_id { uuid_t uuid; };}(hhhjiubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMChjHubj6)}(h **Members**h]jv)}(hjzh]hMembers}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMGhjHubj)}(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}(hhhjhhhNhNubah}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMKubh)}(h wmi_device_idh]h)}(hjh]h wmi_device_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMKubah}(h]jah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMFhjhhubj)}(hhh]j6)}(hWMI device identifierh]hWMI device identifier}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMJhj2hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMKubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh:}(hjhjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMNhjQubj)}(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; };}(hhhjrubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMPhjQubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMUhjQubj)}(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}(hhhjhhhNhNubah}(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.hhMLhjubj)}(hhh]j6)}(h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49bah]h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h+``context`` pointer to driver specific datah](j)}(h ``context``h]j<)}(hjh]hcontext}(hhhjhhhNhNubah}(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.hhMLhjubj)}(hhh]j6)}(hpointer to driver specific datah]hpointer to driver specific data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhj5hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj1hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMZubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1hhhjBhMZubh)}(h mhi_device_idh]h)}(hj/h]h mhi_device_id}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjBhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjBhMZubah}(h]j(ah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMShj*hhubj)}(hhh]j6)}(hMHI device identificationh]hMHI device identification}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMYhjuhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjBhMZubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM_hjubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMdhjubj)}(hhh](j)}(h``chan`` MHI channel name h](j)}(h``chan``h]j<)}(hjh]hchan}(hhhjhhhNhNubah}(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]j6)}(hMHI channel nameh]hMHI channel name}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[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<)}(hjh]h driver_data}(hhhj hhhNhNubah}(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]j6)}(h driver data;h]h driver data;}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM\hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM[hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhjxhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjthhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjhMubh)}(h dfl_device_idh]h)}(hjrh]h dfl_device_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhMubah}(h]jkah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMbhjmhhubj)}(hhh]j6)}(hdfl device identifierh]hdfl device identifier}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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; };}(hhhjubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj6)}(h **Members**h]jv)}(hj h]hMembers}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hj(h]htype}(hhhj*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]j6)}(h1DFL FIU type of the device. See enum dfl_id_type.h]h1DFL FIU type of the device. See enum dfl_id_type.}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h=``feature_id`` feature identifier local to its DFL FIU type. h](j)}(h``feature_id``h]j<)}(hjah]h feature_id}(hhhjchhhNhNubah}(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]j6)}(h-feature identifier local to its DFL FIU type.h]h-feature identifier local to its DFL FIU type.}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h%``driver_data`` driver specific data.h](j)}(h``driver_data``h]j<)}(hjh]h driver_data}(hhhjhhhNhNubah}(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]j6)}(hdriver specific data.h]hdriver specific data.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jkhj\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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMubh)}(hishtp_device_idh]h)}(hjh]hishtp_device_id}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubj)}(hhh]j6)}(hISHTP device identifierh]hISHTP device identifier}(hj9 hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj4 hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jO j3jO j4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjW ubh:}(hjhjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjS 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; };}(hhhjt ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjS ubj6)}(h **Members**h]jv)}(hj h]hMembers}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjS ubj)}(hhh](j)}(h``guid`` GUID of the device. h](j)}(h``guid``h]j<)}(hj h]hguid}(hhhj 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]j6)}(hGUID of the device.h]hGUID of the device.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(hpointer to driver specific datah]hpointer to driver specific data}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]uh1jhjS ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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}(hhhj7!hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj3!hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhjE!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3!hhhjD!hMubh)}(h cdx_device_idh]h)}(hj1!h]h cdx_device_id}(hhhjW!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3!hhhjD!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/!hhhjD!hMubah}(h]j*!ah ](jjeh"]h$]h&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj,!hhubj)}(hhh]j6)}(hCDX device identifierh]hCDX device identifier}(hj|!hjz!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjw!hhubah}(h]h ]h"]h$]h&]uh1jhj,!hhhjD!hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2j!j3j!j4uh1hhhhj\hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubh:}(hjhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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; };}(hhhj!ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj6)}(h **Members**h]jv)}(hj!h]hMembers}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj!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]j6)}(h Vendor IDh]h Vendor ID}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!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}(hhhj""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]j6)}(h Device IDh]h Device ID}(hj;"hj9"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5"hMhj6"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj5"hMhj!ubj)}(h2``subvendor`` Subsystem vendor ID (or CDX_ANY_ID) h](j)}(h ``subvendor``h]j<)}(hjY"h]h subvendor}(hhhj["hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjW"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjS"ubj)}(hhh]j6)}(h#Subsystem vendor ID (or CDX_ANY_ID)h]h#Subsystem vendor ID (or CDX_ANY_ID)}(hjt"hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjn"hMhjo"ubah}(h]h ]h"]h$]h&]uh1jhjS"ubeh}(h]h ]h"]h$]h&]uh1jhjn"hMhj!ubj)}(h2``subdevice`` Subsystem device ID (or CDX_ANY_ID) h](j)}(h ``subdevice``h]j<)}(hj"h]h subdevice}(hhhj"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]j6)}(h#Subsystem device ID (or CDX_ANY_ID)h]h#Subsystem device ID (or CDX_ANY_ID)}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"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}(hhhj"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]j6)}(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"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj#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]j6)}(h7Limit which sub-fields of the class field are compared.h]h7Limit which sub-fields of the class field are compared.}(hj #hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#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}(hhhj@#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.hhMhj8#ubj)}(hhh]j6)}(h4Match only when dev->driver_override is this driver.h]h4Match only when dev->driver_override is this driver.}(hjY#hjW#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjT#ubah}(h]h ]h"]h$]h&]uh1jhj8#ubeh}(h]h ]h"]h$]h&]uh1jhjS#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\hhhNhNubj6)}(h**Description**h]jv)}(hj#h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj6)}(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#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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}(hhhj#hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj#hMubh)}(hcoreboot_device_idh]h)}(hj#h]hcoreboot_device_id}(hhhj#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&]juh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj#hhubj)}(hhh]j6)}(h!Identifies a coreboot table entryh]h!Identifies a coreboot table entry}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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&]j1j,j2j$j3j$j4uh1hhhhj\hNhNubjl)}(h**Definition**:: struct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; }; **Members** ``tag`` tag ID ``driver_data`` driver specific datah](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj&$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"$ubh:}(hjhj"$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5ha/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; };}(hhhj?$ubah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj6)}(h **Members**h]jv)}(hjP$h]hMembers}(hhhjR$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjN$ubah}(h]h ]h"]h$]h&]uh1j5ha/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<)}(hjo$h]htag}(hhhjq$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.hhMhji$ubj)}(hhh]j6)}(htag IDh]htag ID}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhji$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjf$ubj)}(h$``driver_data`` driver specific datah](j)}(h``driver_data``h]j<)}(hj$h]h driver_data}(hhhj$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]j6)}(hdriver specific datah]hdriver specific data}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5ha/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$hMhjf$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj\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$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}(hhhj%hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj%hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMGubj9)}(h h]h }(hhhj)%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%hhhj(%hMGubh)}(h prev_cputimeh]h)}(hj%h]h prev_cputime}(hhhj;%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj(%hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj(%hMGubah}(h]j%ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKhj%hhubj)}(hhh]j6)}(h#snapshot of system and user cputimeh]h#snapshot of system and user cputime}(hj`%hj^%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMFhj[%hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj(%hMGubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jv%j3jv%j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~%ubh:}(hjhj~%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMJhjz%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; };}(hhhj%ubah}(h]h ]h"]h$]h&]jj uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMLhjz%ubj6)}(h **Members**h]jv)}(hj%h]hMembers}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMThjz%ubj)}(hhh](j)}(h"``utime`` time spent in user mode h](j)}(h ``utime``h]j<)}(hj%h]hutime}(hhhj%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.hhMHhj%ubj)}(hhh]j6)}(htime spent in user modeh]htime spent in user mode}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hMHhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMHhj%ubj)}(h$``stime`` time spent in system mode h](j)}(h ``stime``h]j<)}(hj&h]hstime}(hhhj&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.hhMIhj%ubj)}(hhh]j6)}(htime spent in system modeh]htime spent in system mode}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMIhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMIhj%ubj)}(h&``lock`` protects the above two fieldsh](j)}(h``lock``h]j<)}(hj=&h]hlock}(hhhj?&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.hhMIhj7&ubj)}(hhh]j6)}(hprotects the above two fieldsh]hprotects the above two fields}(hjX&hjV&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMJhjS&ubah}(h]h ]h"]h$]h&]uh1jhj7&ubeh}(h]h ]h"]h$]h&]uh1jhjR&hMIhj%ubeh}(h]h ]h"]h$]h&]uh1jhjz%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubj6)}(h**Description**h]jv)}(hj&h]h Description}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~&ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMMhj$hhubj6)}(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&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMKhj$hhubh)}(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}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&hhhj&hMubh)}(hset_cpus_allowed_ptrh]h)}(hset_cpus_allowed_ptrh]hset_cpus_allowed_ptr}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj&hMubj)}(h7(struct task_struct *p, const struct cpumask *new_mask)h](j$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhj&hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj&ubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]jj)}j]j&sbc.set_cpus_allowed_ptrasbuh1hhj&ubj9)}(h h]h }(hhhj9'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjG'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hjh]hp}(hhhjT'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}(hhhjl'hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjh'ubj9)}(h h]h }(hhhjz'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjh'ubj')}(hj*h]hstruct}(hhhj'hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjh'ubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjh'ubh)}(hhh]h)}(hcpumaskh]hcpumask}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]j5'c.set_cpus_allowed_ptrasbuh1hhjh'ubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjh'ubj~)}(hjh]h*}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjh'ubh)}(hnew_maskh]hnew_mask}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh'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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj&hhubj)}(hhh]j6)}(hset CPU affinity mask of a taskh]hset CPU affinity mask of a task}(hj (hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j"(j3j"(j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj,(h]h Parameters}(hhhj.(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*(ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj&(ubj)}(hhh](j)}(h#``struct task_struct *p`` the task h](j)}(h``struct task_struct *p``h]j<)}(hjK(h]hstruct task_struct *p}(hhhjM(hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjI(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjE(ubj)}(hhh]j6)}(hthe taskh]hthe task}(hjf(hjd(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`(hMhja(ubah}(h]h ]h"]h$]h&]uh1jhjE(ubeh}(h]h ]h"]h$]h&]uh1jhj`(hMhjB(ubj)}(h5``const struct cpumask *new_mask`` CPU affinity mask h](j)}(h"``const struct cpumask *new_mask``h]j<)}(hj(h]hconst struct cpumask *new_mask}(hhhj(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]j6)}(hCPU affinity maskh]hCPU affinity mask}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj~(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjB(ubeh}(h]h ]h"]h$]h&]uh1jhj&(ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj&(ubj6)}(h,zero if successful, or a negative error codeh]h,zero if successful, or a negative error code}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj&(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)hhhj)hMubh)}(h task_niceh]h)}(h task_niceh]h task_nice}(hhhj%)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj)hMubj)}(h(const struct task_struct *p)h]j$)}(hconst struct task_struct *ph](j')}(hjn'h]hconst}(hhhjA)hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj=)ubj9)}(h h]h }(hhhjN)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=)ubj')}(hj*h]hstruct}(hhhj\)hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj=)ubj9)}(h h]h }(hhhji)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=)ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjz)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj|)modnameN classnameNjajd)}jg]jj)}j]j')sb c.task_niceasbuh1hhj=)ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=)ubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=)ubh)}(hjh]hp}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj9)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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(hhubj)}(hhh]j6)}(h&return the nice value of a given task.h]h&return the nice value of a given task.}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj)hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j)j3j)j4uh1hhhhj$hNhNubjl)}(hy**Parameters** ``const struct task_struct *p`` the task in question. **Return** The nice value [ -20 ... 0 ... 19 ].h](j6)}(h**Parameters**h]jv)}(hj*h]h Parameters}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj)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}(hhhj"*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]j6)}(hthe task in question.h]hthe task in question.}(hj;*hj9*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5*hMhj6*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj5*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h **Return**h]jv)}(hj[*h]hReturn}(hhhj]*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjY*ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj)ubj6)}(h$The nice value [ -20 ... 0 ... 19 ].h]h$The nice value [ -20 ... 0 ... 19 ].}(hjs*hjq*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM(ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*hhhj*hM(ubh)}(h is_idle_taskh]h)}(h is_idle_taskh]h is_idle_task}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj*hM(ubj)}(h(const struct task_struct *p)h]j$)}(hconst struct task_struct *ph](j')}(hjn'h]hconst}(hhhj*hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj*ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubj')}(hj*h]hstruct}(hhhj*hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj*ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]j*sbc.is_idle_taskasbuh1hhj*ubj9)}(h h]h }(hhhj5+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubj~)}(hjh]h*}(hhhjC+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubh)}(hjh]hp}(hhhjP+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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM,hj*hhubj)}(hhh]j6)}(h#is the specified task an idle task?h]h#is the specified task an idle task?}(hj|+hjz+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM'hjw+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hM(ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhj$hNhNubjl)}(h}**Parameters** ``const struct task_struct *p`` the task in question. **Return** 1 if **p** is an idle task. 0 otherwise.h](j6)}(h**Parameters**h]jv)}(hj+h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhj+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.hhM(hj+ubj)}(hhh]j6)}(hthe task in question.h]hthe task in question.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+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+ubj6)}(h **Return**h]jv)}(hj+h]hReturn}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM*hj+ubj6)}(h(1 if **p** is an idle task. 0 otherwise.h](h1 if }(h1 if hj ,hhhNhNubjv)}(h**p**h]hp}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ,ubh is an idle task. 0 otherwise.}(h is an idle task. 0 otherwise.hj ,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM*hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjO,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK,hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubj9)}(h h]h }(hhhj^,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjK,hhhj],hMubh)}(hwake_up_processh]h)}(hwake_up_processh]hwake_up_process}(hhhjp,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjK,hhhj],hMubj)}(h(struct task_struct *p)h]j$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhj,hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj,modnameN classnameNjajd)}jg]jj)}j]jr,sbc.wake_up_processasbuh1hhj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hjh]hp}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,ubah}(h]h ]h"]h$]h&]jj uh1jhjK,hhhj],hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjG,hhhj],hMubah}(h]jB,ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjD,hhubj)}(hhh]j6)}(hWake up a specific processh]hWake up a specific process}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj -hhubah}(h]h ]h"]h$]h&]uh1jhjD,hhhj],hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j'-j3j'-j4uh1hhhhj$hNhNubjl)}(hXH**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](j6)}(h**Parameters**h]jv)}(hj1-h]h Parameters}(hhhj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/-ubah}(h]h ]h"]h$]h&]uh1j5hU/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<)}(hjP-h]hstruct task_struct *p}(hhhjR-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjN-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjJ-ubj)}(hhh]j6)}(hThe process to be woken up.h]hThe process to be woken up.}(hjk-hji-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hje-hMhjf-ubah}(h]h ]h"]h$]h&]uh1jhjJ-ubeh}(h]h ]h"]h$]h&]uh1jhje-hMhjG-ubah}(h]h ]h"]h$]h&]uh1jhj+-ubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj+-ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj+-ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj+-ubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj+-ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj+-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMGubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.hhhj.hMGubh)}(hpreempt_notifier_registerh]h)}(hpreempt_notifier_registerh]hpreempt_notifier_register}(hhhj'.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj.hMGubj)}(h#(struct preempt_notifier *notifier)h]j$)}(h!struct preempt_notifier *notifierh](j')}(hj*h]hstruct}(hhhjC.hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj?.ubj9)}(h h]h }(hhhjP.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?.ubh)}(hhh]h)}(hpreempt_notifierh]hpreempt_notifier}(hhhja.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjc.modnameN classnameNjajd)}jg]jj)}j]j).sbc.preempt_notifier_registerasbuh1hhj?.ubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?.ubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?.ubh)}(hnotifierh]hnotifier}(hhhj.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.hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhj.hMGubah}(h]j-ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMIhj-hhubj)}(hhh]j6)}(h5tell me when current is being preempted & rescheduledh]h5tell me when current is being preempted & rescheduled}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMFhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj.hMGubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j.j3j.j4uh1hhhhj$hNhNubjl)}(hS**Parameters** ``struct preempt_notifier *notifier`` notifier struct to registerh](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMJhj.ubj)}(hhh]j)}(hA``struct preempt_notifier *notifier`` notifier struct to registerh](j)}(h%``struct preempt_notifier *notifier``h]j<)}(hj/h]h!struct preempt_notifier *notifier}(hhhj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMLhj/ubj)}(hhh]j6)}(hnotifier struct to registerh]hnotifier struct to register}(hj#/hj!/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMGhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMLhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjb/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^/hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMTubj9)}(h h]h }(hhhjq/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^/hhhjp/hMTubh)}(hpreempt_notifier_unregisterh]h)}(hpreempt_notifier_unregisterh]hpreempt_notifier_unregister}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^/hhhjp/hMTubj)}(h#(struct preempt_notifier *notifier)h]j$)}(h!struct preempt_notifier *notifierh](j')}(hj*h]hstruct}(hhhj/hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj/ubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/ubh)}(hhh]h)}(hpreempt_notifierh]hpreempt_notifier}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/modnameN classnameNjajd)}jg]jj)}j]j/sbc.preempt_notifier_unregisterasbuh1hhj/ubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/ubj~)}(hjh]h*}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj/ubh)}(hnotifierh]hnotifier}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj/ubah}(h]h ]h"]h$]h&]jj uh1jhj^/hhhjp/hMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZ/hhhjp/hMTubah}(h]jU/ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMXhjW/hhubj)}(hhh]j6)}(h0no longer interested in preemption notificationsh]h0no longer interested in preemption notifications}(hj%0hj#0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMShj 0hhubah}(h]h ]h"]h$]h&]uh1jhjW/hhhjp/hMTubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;0j3j;0j4uh1hhhhj$hNhNubjl)}(h**Parameters** ``struct preempt_notifier *notifier`` notifier struct to unregister **Description** This is *not* safe to call from within a preemption notifier.h](j6)}(h**Parameters**h]jv)}(hjE0h]h Parameters}(hhhjG0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC0ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMWhj?0ubj)}(hhh]j)}(hD``struct preempt_notifier *notifier`` notifier struct to unregister h](j)}(h%``struct preempt_notifier *notifier``h]j<)}(hjd0h]h!struct preempt_notifier *notifier}(hhhjf0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjb0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMThj^0ubj)}(hhh]j6)}(hnotifier struct to unregisterh]hnotifier struct to unregister}(hj0hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjy0hMThjz0ubah}(h]h ]h"]h$]h&]uh1jhj^0ubeh}(h]h ]h"]h$]h&]uh1jhjy0hMThj[0ubah}(h]h ]h"]h$]h&]uh1jhj?0ubj6)}(h**Description**h]jv)}(hj0h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMVhj?0ubj6)}(h=This is *not* safe to call from within a preemption notifier.h](hThis is }(hThis is hj0hhhNhNubhemphasis)}(h*not*h]hnot}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj0ubh0 safe to call from within a preemption notifier.}(h0 safe to call from within a preemption notifier.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMVhj?0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj0hhhNhNubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM@ubj)}(hvoidh]hvoid}(hhhj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj 1hM@ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhj 1hM@ubhnotrace}(hhhj0hhhNhNubj9)}(h h]h }(hhhj-1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhj 1hM@ubh)}(hpreempt_schedule_notraceh]h)}(hpreempt_schedule_notraceh]hpreempt_schedule_notrace}(hhhj?1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj 1hM@ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj[1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW1ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjS1ubah}(h]h ]h"]h$]h&]jj uh1jhj0hhhj 1hM@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhj 1hM@ubah}(h]j0ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMLhj0hhubj)}(hhh]j6)}(h"preempt_schedule called by tracingh]h"preempt_schedule called by tracing}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM?hj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj 1hM@ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhj$hNhNubjl)}(hXT**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](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMChj1ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj1h]hvoid}(hhhj1hhhNhNubah}(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.chMFhj1ubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hMFhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMFhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hj2h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMHhj1ubj6)}(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.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMAhj1ubj6)}(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.}(hj)2hj'2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMHhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌyield (C function)c.yieldhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hvoid yield (void)h]h)}(hvoid yield(void)h](j)}(hvoidh]hvoid}(hhhjV2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR2hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"ubj9)}(h h]h }(hhhje2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjR2hhhjd2hM"ubh)}(hyieldh]h)}(hyieldh]hyield}(hhhjw2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjR2hhhjd2hM"ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubah}(h]h ]h"]h$]h&]jj uh1jhjR2hhhjd2hM"ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjN2hhhjd2hM"ubah}(h]jI2ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hjK2hhubj)}(hhh]j6)}(h-yield the current processor to other threads.h]h-yield the current processor to other threads.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2hhubah}(h]h ]h"]h$]h&]uh1jhjK2hhhjd2hM"ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2j3j2j4uh1hhhhj$hNhNubjl)}(hX**Parameters** ``void`` no arguments **Description** Do not ever use this function, there's a 99% chance you're doing it wrong. The scheduler is at all times free to pick the calling task as the most eligible task to run, if removing the yield() call from your code breaks it, it's already broken. Typical broken usage is: while (!event) yield(); where one assumes that yield() will let 'the other' process run that will make event true. If the current task is a SCHED_FIFO task that will never happen. Never use yield() as a progress guarantee!! If you want to use yield() to wait for something, use wait_event(). If you want to use yield() to be 'nice' for others, use cond_resched(). If you still want to use yield(), do not!h](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj2h]hvoid}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM"hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hM"hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hj:3h]h Description}(hhhj<3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj83ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj6)}(hJDo not ever use this function, there's a 99% chance you're doing it wrong.h]hNDo not ever use this function, there’s a 99% chance you’re doing it wrong.}(hjR3hjP3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj6)}(hThe scheduler is at all times free to pick the calling task as the most eligible task to run, if removing the yield() call from your code breaks it, it's already broken.h]hThe scheduler is at all times free to pick the calling task as the most eligible task to run, if removing the yield() call from your code breaks it, it’s already broken.}(hja3hj_3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj6)}(hTypical broken usage is:h]hTypical broken usage is:}(hjp3hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj)}(hhh]j)}(hwhile (!event) yield(); h](j)}(hwhile (!event)h]hwhile (!event)}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj3ubj)}(hhh]j6)}(hyield();h]hyield();}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM"hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM"hj}3ubah}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(hwhere one assumes that yield() will let 'the other' process run that will make event true. If the current task is a SCHED_FIFO task that will never happen. Never use yield() as a progress guarantee!!h]hwhere one assumes that yield() will let ‘the other’ process run that will make event true. If the current task is a SCHED_FIFO task that will never happen. Never use yield() as a progress guarantee!!}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubj6)}(hIf you want to use yield() to wait for something, use wait_event(). If you want to use yield() to be 'nice' for others, use cond_resched(). If you still want to use yield(), do not!h]hIf you want to use yield() to wait for something, use wait_event(). If you want to use yield() to be ‘nice’ for others, use cond_resched(). If you still want to use yield(), do not!}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌyield_to (C function) c.yield_tohNtauh1hhj$hhhNhNubh)}(hhh](h)}(h2int yield_to (struct task_struct *p, bool preempt)h]h)}(h1int yield_to(struct task_struct *p, bool preempt)h](j)}(hinth]hint}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3hhhj4hM"ubh)}(hyield_toh]h)}(hyield_toh]hyield_to}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj4hM"ubj)}(h%(struct task_struct *p, bool preempt)h](j$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhj14hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj-4ubj9)}(h h]h }(hhhj>4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-4ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjO4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjQ4modnameN classnameNjajd)}jg]jj)}j]j4sb c.yield_toasbuh1hhj-4ubj9)}(h h]h }(hhhjo4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-4ubj~)}(hjh]h*}(hhhj}4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-4ubh)}(hjh]hp}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj)4ubj$)}(h bool preempth](j)}(hjh]hbool}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hpreempth]hpreempt}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj)4ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhj4hM"ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj4hM"ubah}(h]j3ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj3hhubj)}(hhh]j6)}(h{yield the current processor to another thread in your thread group, or accelerate that thread toward the processor it's on.h]h}yield the current processor to another thread in your thread group, or accelerate that thread toward the processor it’s on.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj4hM"ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhj$hNhNubjl)}(hX**Parameters** ``struct task_struct *p`` target task ``bool preempt`` whether task preemption is allowed or not **Description** It's the caller's job to ensure that the target task struct can't go away on us before we can do any checks. **Return** true (>0) if we indeed boosted the target task. false (0) if we failed to boost the target. -ESRCH if there's no task to yield to.h](j6)}(h**Parameters**h]jv)}(hj 5h]h Parameters}(hhhj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj5ubj)}(hhh](j)}(h&``struct task_struct *p`` target task h](j)}(h``struct task_struct *p``h]j<)}(hj)5h]hstruct task_struct *p}(hhhj+5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj#5ubj)}(hhh]j6)}(h target taskh]h target task}(hjD5hjB5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>5hM"hj?5ubah}(h]h ]h"]h$]h&]uh1jhj#5ubeh}(h]h ]h"]h$]h&]uh1jhj>5hM"hj 5ubj)}(h;``bool preempt`` whether task preemption is allowed or not h](j)}(h``bool preempt``h]j<)}(hjb5h]h bool preempt}(hhhjd5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj\5ubj)}(hhh]j6)}(h)whether task preemption is allowed or noth]h)whether task preemption is allowed or not}(hj}5hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjw5hM"hjx5ubah}(h]h ]h"]h$]h&]uh1jhj\5ubeh}(h]h ]h"]h$]h&]uh1jhjw5hM"hj 5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj5ubj6)}(hlIt's the caller's job to ensure that the target task struct can't go away on us before we can do any checks.h]hrIt’s the caller’s job to ensure that the target task struct can’t go away on us before we can do any checks.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj5ubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj5ubjR)}(hhh]j6)}(htrue (>0) if we indeed boosted the target task. false (0) if we failed to boost the target. -ESRCH if there's no task to yield to.h]htrue (>0) if we indeed boosted the target task. false (0) if we failed to boost the target. -ESRCH if there’s no task to yield to.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM"hj5ubah}(h]h ]h"]h$]h&]uh1jQhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubj9)}(h h]h }(hhhj!6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6hhhj 6hKubh)}(hcpupri_find_fitnessh]h)}(hcpupri_find_fitnessh]hcpupri_find_fitness}(hhhj36hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhj 6hKubj)}(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}(hhhjO6hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjK6ubj9)}(h h]h }(hhhj\6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjK6ubh)}(hhh]h)}(hcpuprih]hcpupri}(hhhjm6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjo6modnameN classnameNjajd)}jg]jj)}j]j56sbc.cpupri_find_fitnessasbuh1hhjK6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjK6ubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjK6ubh)}(hcph]hcp}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjG6ubj$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhj6hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj6modnameN classnameNjajd)}jg]j6c.cpupri_find_fitnessasbuh1hhj6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubj~)}(hjh]h*}(hhhj 7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6ubh)}(hjh]hp}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjG6ubj$)}(hstruct cpumask *lowest_maskh](j')}(hj*h]hstruct}(hhhj07hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj,7ubj9)}(h h]h }(hhhj=7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,7ubh)}(hhh]h)}(hcpumaskh]hcpumask}(hhhjN7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjP7modnameN classnameNjajd)}jg]j6c.cpupri_find_fitnessasbuh1hhj,7ubj9)}(h h]h }(hhhjl7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,7ubj~)}(hjh]h*}(hhhjz7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,7ubh)}(h lowest_maskh]h lowest_mask}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjG6ubj$)}(h2bool (*fitness_fn)(struct task_struct *p, int cpu)h](j)}(hjh]hbool}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj~)}(h(h]h(}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubj~)}(hjh]h*}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubh)}(h fitness_fnh]h fitness_fn}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubj~)}(hjh]h)}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubj~)}(hj7h]h(}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubj')}(hj*h]hstruct}(hhhj7hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj7ubj9)}(h h]h }(hhhj 8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj8modnameN classnameNjajd)}jg]j6,c.cpupri_find_fitnessasbuh1hhj7ubj9)}(h h]h }(hhhj:8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj~)}(hjh]h*}(hhhjH8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubh)}(hjh]hp}(hhhjU8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubj~)}(h,h]h,}(hhhjb8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubj9)}(h h]h }(hhhjp8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj)}(hinth]hint}(hhhj~8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubh)}(hcpuh]hcpu}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubj~)}(hjh]h)}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjG6ubeh}(h]h ]h"]h$]h&]jj uh1jhj6hhhj 6hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj 6hhhj 6hKubah}(h]j6ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj6hhubj)}(hhh]j6)}(h,find the best (lowest-pri) CPU in the systemh]h,find the best (lowest-pri) CPU in the system}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj 6hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]j<)}(hj9h]hstruct cpupri *cp}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj 9ubj)}(hhh]j6)}(hThe cpupri contexth]hThe cpupri context}(hj.9hj,9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(9hKhj)9ubah}(h]h ]h"]h$]h&]uh1jhj 9ubeh}(h]h ]h"]h$]h&]uh1jhj(9hKhj 9ubj)}(h#``struct task_struct *p`` The task h](j)}(h``struct task_struct *p``h]j<)}(hjL9h]hstruct task_struct *p}(hhhjN9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJ9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjF9ubj)}(hhh]j6)}(hThe taskh]hThe task}(hjg9hje9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hja9hKhjb9ubah}(h]h ]h"]h$]h&]uh1jhjF9ubeh}(h]h ]h"]h$]h&]uh1jhja9hKhj 9ubj)}(hO``struct cpumask *lowest_mask`` A mask to fill in with selected CPUs (or NULL) h](j)}(h``struct cpumask *lowest_mask``h]j<)}(hj9h]hstruct cpumask *lowest_mask}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj9ubj)}(hhh]j6)}(h.A mask to fill in with selected CPUs (or NULL)h]h.A mask to fill in with selected CPUs (or NULL)}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhj 9ubj)}(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<)}(hj9h]h2bool (*fitness_fn)(struct task_struct *p, int cpu)}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj9ubj)}(hhh]j6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhj 9ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Note**h]jv)}(hj9h]hNote}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj6)}(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.}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj6)}(h **Return**h]jv)}(hj!:h]hReturn}(hhhj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj6)}(h(int)bool - CPUs were foundh]h(int)bool - CPUs were found}(hj9:hj7:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjf:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb:hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubj9)}(h h]h }(hhhju:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjb:hhhjt:hKubh)}(h cpupri_seth]h)}(h cpupri_seth]h cpupri_set}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjb:hhhjt:hKubj)}(h((struct cpupri *cp, int cpu, int newpri)h](j$)}(hstruct cpupri *cph](j')}(hj*h]hstruct}(hhhj:hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubh)}(hhh]h)}(hcpuprih]hcpupri}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]jj)}j]j:sb c.cpupri_setasbuh1hhj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubj~)}(hjh]h*}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubh)}(hcph]hcp}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:ubj$)}(hint cpuh](j)}(hinth]hint}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(h h]h }(hhhj#;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj;ubh)}(hcpuh]hcpu}(hhhj1;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:ubj$)}(h int newprih](j)}(hinth]hint}(hhhjJ;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF;ubj9)}(h h]h }(hhhjX;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjF;ubh)}(hnewprih]hnewpri}(hhhjf;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjb:hhhjt:hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^:hhhjt:hKubah}(h]jY:ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj[:hhubj)}(hhh]j6)}(hupdate the CPU priority settingh]hupdate the CPU priority setting}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;hhubah}(h]h ]h"]h$]h&]uh1jhj[:hhhjt:hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj;h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhj;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]j6)}(hThe cpupri contexth]hThe cpupri context}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;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}(hhhj <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]j6)}(hThe target CPUh]hThe target CPU}(hj&<hj$<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj <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<)}(hjD<h]h int newpri}(hhhjF<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjB<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj><ubj)}(hhh]j6)}(hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPUh]hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU}(hj_<hj]<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjY<hKhjZ<ubah}(h]h ]h"]h$]h&]uh1jhj><ubeh}(h]h ]h"]h$]h&]uh1jhjY<hKhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubj6)}(h**Note**h]jv)}(hj<h]hNote}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}<ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;ubj6)}(h#Assumes cpu_rq(cpu)->lock is lockedh]h#Assumes cpu_rq(cpu)->lock is locked}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;ubj6)}(h **Return**h]jv)}(hj<h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;ubj6)}(h(void)h]h(void)}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhj<hMubh)}(h cpupri_inith]h)}(h cpupri_inith]h cpupri_init}(hhhj =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}(hhhj(=hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj$=ubj9)}(h h]h }(hhhj5=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$=ubh)}(hhh]h)}(hcpuprih]hcpupri}(hhhjF=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjH=modnameN classnameNjajd)}jg]jj)}j]j=sb c.cpupri_initasbuh1hhj$=ubj9)}(h h]h }(hhhjf=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$=ubj~)}(hjh]h*}(hhhjt=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$=ubh)}(hcph]hcp}(hhhj=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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<hhubj)}(hhh]j6)}(hinitialize the cpupri structureh]hinitialize the cpupri structure}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2j=j3j=j4uh1hhhhj$hNhNubjl)}(hm**Parameters** ``struct cpupri *cp`` The cpupri context **Return** -ENOMEM on memory allocation failure.h](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhj=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]j6)}(hThe cpupri contexth]hThe cpupri context}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h **Return**h]jv)}(hj(>h]hReturn}(hhhj*>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&>ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj=ubj6)}(h%-ENOMEM on memory allocation failure.h]h%-ENOMEM on memory allocation failure.}(hj@>hj>>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjm>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji>hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3ubj9)}(h h]h }(hhhj|>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hji>hhhj{>hM3ubh)}(hcpupri_cleanuph]h)}(hcpupri_cleanuph]hcpupri_cleanup}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhji>hhhj{>hM3ubj)}(h(struct cpupri *cp)h]j$)}(hstruct cpupri *cph](j')}(hj*h]hstruct}(hhhj>hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj>ubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubh)}(hhh]h)}(hcpuprih]hcpupri}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]j>sbc.cpupri_cleanupasbuh1hhj>ubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubj~)}(hjh]h*}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj>ubh)}(hcph]hcp}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj>ubah}(h]h ]h"]h$]h&]jj uh1jhji>hhhj{>hM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhje>hhhj{>hM3ubah}(h]j`>ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM5hjb>hhubj)}(hhh]j6)}(hclean up the cpupri structureh]hclean up the cpupri structure}(hj0?hj.?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM2hj+?hhubah}(h]h ]h"]h$]h&]uh1jhjb>hhhj{>hM3ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jF?j3jF?j4uh1hhhhj$hNhNubjl)}(h:**Parameters** ``struct cpupri *cp`` The cpupri contexth](j6)}(h**Parameters**h]jv)}(hjP?h]h Parameters}(hhhjR?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjN?ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM6hjJ?ubj)}(hhh]j)}(h(``struct cpupri *cp`` The cpupri contexth](j)}(h``struct cpupri *cp``h]j<)}(hjo?h]hstruct cpupri *cp}(hhhjq?hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjm?ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM8hji?ubj)}(hhh]j6)}(hThe cpupri contexth]hThe cpupri context}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3hj?ubah}(h]h ]h"]h$]h&]uh1jhji?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM8hjf?ubah}(h]h ]h"]h$]h&]uh1jhjJ?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?hhhj?hMubh)}(hupdate_tg_load_avgh]h)}(hupdate_tg_load_avgh]hupdate_tg_load_avg}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?hhhj?hMubj)}(h(struct cfs_rq *cfs_rq)h]j$)}(hstruct cfs_rq *cfs_rqh](j')}(hj*h]hstruct}(hhhj@hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj@ubj9)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hhhj$@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!@ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&@modnameN classnameNjajd)}jg]jj)}j]j?sbc.update_tg_load_avgasbuh1hhj@ubj9)}(h h]h }(hhhjD@hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubj~)}(hjh]h*}(hhhjR@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubh)}(hcfs_rqh]hcfs_rq}(hhhj_@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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj?hhubj)}(hhh]j6)}(hupdate the tg's load avgh]hupdate the tg’s load avg}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j@j3j@j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@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}(hhhj@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.chMhj@ubj)}(hhh]j6)}(hthe cfs_rq whose avg changedh]hthe cfs_rq whose avg changed}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubj6)}(h**Description**h]jv)}(hjAh]h Description}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@ubj6)}(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.}(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.hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@ubj6)}(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.Ahj,AhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@ubj6)}(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=Ahj;AhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfAhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubj9)}(h h]h }(hhhjyAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfAhhhjxAhMubh)}(hupdate_cfs_rq_load_avgh]h)}(hupdate_cfs_rq_load_avgh]hupdate_cfs_rq_load_avg}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfAhhhjxAhMubj)}(h (u64 now, struct cfs_rq *cfs_rq)h](j$)}(hu64 nowh](h)}(hhh]h)}(hu64h]hu64}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jj)}j]jAsbc.update_cfs_rq_load_avgasbuh1hhjAubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hnowh]hnow}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(hstruct cfs_rq *cfs_rqh](j')}(hj*h]hstruct}(hhhjAhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjAubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Bubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jAc.update_cfs_rq_load_avgasbuh1hhjAubj9)}(h h]h }(hhhj-BhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubj~)}(hjh]h*}(hhhj;BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjAubh)}(hcfs_rqh]hcfs_rq}(hhhjHBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjfAhhhjxAhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbAhhhjxAhMubah}(h]j]Aah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj_Ahhubj)}(hhh]j6)}(h&update the cfs_rq's load/util averagesh]h(update the cfs_rq’s load/util averages}(hjuBhjsBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjpBhhubah}(h]h ]h"]h$]h&]uh1jhj_AhhhjxAhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhj$hNhNubjl)}(hX%**Parameters** ``u64 now`` current time, as per cfs_rq_clock_pelt() ``struct cfs_rq *cfs_rq`` cfs_rq to update **Description** The 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. cfs_rq->avg 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](j6)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj)}(hhh](j)}(h5``u64 now`` current time, as per cfs_rq_clock_pelt() h](j)}(h ``u64 now``h]j<)}(hjBh]hu64 now}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj)}(hhh]j6)}(h(current time, as per cfs_rq_clock_pelt()h]h(current time, as per cfs_rq_clock_pelt()}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h+``struct cfs_rq *cfs_rq`` cfs_rq to update h](j)}(h``struct cfs_rq *cfs_rq``h]j<)}(hjBh]hstruct cfs_rq *cfs_rq}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj)}(hhh]j6)}(hcfs_rq to updateh]hcfs_rq to update}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj6)}(h**Description**h]jv)}(hj(Ch]h Description}(hhhj*ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&Cubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj6)}(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@Chj>ChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj6)}(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.}(hjOChjMChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj6)}(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^Chj\ChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj6)}(h **Return**h]jv)}(hjmCh]hReturn}(hhhjoChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkCubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubj6)}(h,true if the load decayed or we removed load.h]h,true if the load decayed or we removed load.}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#ubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjChhhjChM#ubh)}(hattach_entity_load_avgh]h)}(hattach_entity_load_avgh]hattach_entity_load_avg}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjChM#ubj)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j$)}(hstruct cfs_rq *cfs_rqh](j')}(hj*h]hstruct}(hhhjChhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjCubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hhhj DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Dubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjDmodnameN classnameNjajd)}jg]jj)}j]jCsbc.attach_entity_load_avgasbuh1hhjCubj9)}(h h]h }(hhhj-DhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCubj~)}(hjh]h*}(hhhj;DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjCubh)}(hcfs_rqh]hcfs_rq}(hhhjHDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjCubj$)}(hstruct sched_entity *seh](j')}(hj*h]hstruct}(hhhjaDhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj]Dubj9)}(h h]h }(hhhjnDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]Dubh)}(hhh]h)}(h sched_entityh]h sched_entity}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|Dubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjDmodnameN classnameNjajd)}jg]j)Dc.attach_entity_load_avgasbuh1hhj]Dubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]Dubj~)}(hjh]h*}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj]Dubh)}(hseh]hse}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjCubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhjChM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjChM#ubah}(h]jCah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjChhubj)}(hhh]j6)}(h)attach this entity to its cfs_rq load avgh]h)attach this entity to its cfs_rq load avg}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjDhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChM#ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jDj3jDj4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&hjDubj)}(hhh](j)}(h.``struct cfs_rq *cfs_rq`` cfs_rq to attach to h](j)}(h``struct cfs_rq *cfs_rq``h]j<)}(hj$Eh]hstruct cfs_rq *cfs_rq}(hhhj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj"Eubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#hjEubj)}(hhh]j6)}(hcfs_rq to attach toh]hcfs_rq to attach to}(hj?Ehj=EhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9EhM#hj:Eubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj9EhM#hjEubj)}(h3``struct sched_entity *se`` sched_entity to attach h](j)}(h``struct sched_entity *se``h]j<)}(hj]Eh]hstruct sched_entity *se}(hhhj_EhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj[Eubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$hjWEubj)}(hhh]j6)}(hsched_entity to attachh]hsched_entity to attach}(hjxEhjvEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrEhM$hjsEubah}(h]h ]h"]h$]h&]uh1jhjWEubeh}(h]h ]h"]h$]h&]uh1jhjrEhM$hjEubeh}(h]h ]h"]h$]h&]uh1jhjDubj6)}(h**Description**h]jv)}(hjEh]h Description}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&hjDubj6)}(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.}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMZubj9)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEhhhjEhMZubh)}(hdetach_entity_load_avgh]h)}(hdetach_entity_load_avgh]hdetach_entity_load_avg}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhjEhMZubj)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j$)}(hstruct cfs_rq *cfs_rqh](j')}(hj*h]hstruct}(hhhjFhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjFubj9)}(h h]h }(hhhj'FhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hhhj8FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Fubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:FmodnameN classnameNjajd)}jg]jj)}j]jFsbc.detach_entity_load_avgasbuh1hhjFubj9)}(h h]h }(hhhjXFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubj~)}(hjh]h*}(hhhjfFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFubh)}(hcfs_rqh]hcfs_rq}(hhhjsFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjFubj$)}(hstruct sched_entity *seh](j')}(hj*h]hstruct}(hhhjFhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjFubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubh)}(hhh]h)}(h sched_entityh]h sched_entity}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjFmodnameN classnameNjajd)}jg]jTFc.detach_entity_load_avgasbuh1hhjFubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFubh)}(hseh]hse}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjFubeh}(h]h ]h"]h$]h&]jj uh1jhjEhhhjEhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjEhMZubah}(h]jEah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM`hjEhhubj)}(hhh]j6)}(h+detach this entity from its cfs_rq load avgh]h+detach this entity from its cfs_rq load avg}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMYhj Ghhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMZubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j&Gj3j&Gj4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0Gh]h Parameters}(hhhj2GhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.Gubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM]hj*Gubj)}(hhh](j)}(h0``struct cfs_rq *cfs_rq`` cfs_rq to detach from h](j)}(h``struct cfs_rq *cfs_rq``h]j<)}(hjOGh]hstruct cfs_rq *cfs_rq}(hhhjQGhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMGubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMZhjIGubj)}(hhh]j6)}(hcfs_rq to detach fromh]hcfs_rq to detach from}(hjjGhjhGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdGhMZhjeGubah}(h]h ]h"]h$]h&]uh1jhjIGubeh}(h]h ]h"]h$]h&]uh1jhjdGhMZhjFGubj)}(h3``struct sched_entity *se`` sched_entity to detach h](j)}(h``struct sched_entity *se``h]j<)}(hjGh]hstruct sched_entity *se}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM[hjGubj)}(hhh]j6)}(hsched_entity to detachh]hsched_entity to detach}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhM[hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM[hjFGubeh}(h]h ]h"]h$]h&]uh1jhj*Gubj6)}(h**Description**h]jv)}(hjGh]h Description}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM]hj*Gubj6)}(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.}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM]hj*Gubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhjHhMubj)}(hlongh]hlong}(hhhj%HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhMubj9)}(h h]h }(hhhj3HhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhjHhMubh)}(hcpu_utilh]h)}(hcpu_utilh]hcpu_util}(hhhjEHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAHubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjHhMubj)}(h8(int cpu, struct task_struct *p, int dst_cpu, int boost)h](j$)}(hint cpuh](j)}(hinth]hint}(hhhjaHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Hubj9)}(h h]h }(hhhjoHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]Hubh)}(hcpuh]hcpu}(hhhj}HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Hubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYHubj$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhjHhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjHubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHmodnameN classnameNjajd)}jg]jj)}j]jGHsb c.cpu_utilasbuh1hhjHubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubj~)}(hjh]h*}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjHubh)}(hjh]hp}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYHubj$)}(h int dst_cpuh](j)}(hinth]hint}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubh)}(hdst_cpuh]hdst_cpu}(hhhj#IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYHubj$)}(h int boosth](j)}(hinth]hint}(hhhj 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](j6)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjIubj)}(hhh](j)}(h/``int cpu`` the CPU to get the utilization for h](j)}(h ``int cpu``h]j<)}(hjIh]hint cpu}(hhhjIhhhNhNubah}(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.chMhjIubj)}(hhh]j6)}(h"the CPU to get the utilization forh]h"the CPU to get the utilization for}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(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<)}(hjIh]hstruct task_struct *p}(hhhjIhhhNhNubah}(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.chMhjIubj)}(hhh]j6)}(h>task for which the CPU utilization should be predicted or NULLh]h>task for which the CPU utilization should be predicted or NULL}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(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<)}(hj6Jh]h int dst_cpu}(hhhj8JhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4Jubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj0Jubj)}(hhh]j6)}(hFCPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULLh](hCPU }(hCPU hjOJhhhNhNubjv)}(h**p**h]hp}(hhhjXJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOJubh migrates to, -1 if }(h migrates to, -1 if hjOJhhhNhNubjv)}(h**p**h]hp}(hhhjkJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOJubh moves from }(h moves from hjOJhhhNhNubjv)}(h**cpu**h]hcpu}(hhhj~JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOJubh or }(h or hjOJhhhNhNubjv)}(h**p**h]hp}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOJubh == NULL}(h == NULLhjOJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjKJhMhjLJubah}(h]h ]h"]h$]h&]uh1jhj0Jubeh}(h]h ]h"]h$]h&]uh1jhjKJhMhjIubj)}(h0``int boost`` 1 to enable boosting, otherwise 0 h](j)}(h ``int boost``h]j<)}(hjJh]h int boost}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjJubj)}(hhh]j6)}(h!1 to enable boosting, otherwise 0h]h!1 to enable boosting, otherwise 0}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjIubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjIubj6)}(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.}(hjKhj KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjIubj6)}(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.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjIubj6)}(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-Khj+KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjIubj6)}(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().}(hj is a busier group than the previously selected busiest group.}(h> is a busier group than the previously selected busiest group.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0'hjWubj6)}(h **Return**h]jv)}(hjXh]hReturn}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM3'hjWubj6)}(he``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjXubh if }(h if hjXhhhNhNubjv)}(h**sg**h]hsg}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh? is a busier group than the previously selected busiest group. }(h? is a busier group than the previously selected busiest group. hjXhhhNhNubj<)}(h ``false``h]hfalse}(hhhj YhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjXubh otherwise.}(h otherwise.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM3'hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjDYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@YhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM'ubj9)}(h h]h }(hhhjSYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@YhhhjRYhM'ubh)}(hidle_cpu_withouth]h)}(hidle_cpu_withouth]hidle_cpu_without}(hhhjeYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@YhhhjRYhM'ubj)}(h (int cpu, struct task_struct *p)h](j$)}(hint cpuh](j)}(hinth]hint}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Yubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}Yubh)}(hcpuh]hcpu}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Yubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjyYubj$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhjYhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjYubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYmodnameN classnameNjajd)}jg]jj)}j]jgYsbc.idle_cpu_withoutasbuh1hhjYubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hjh]h*}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hjh]hp}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjyYubeh}(h]h ]h"]h$]h&]jj uh1jhj@YhhhjRYhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjm]ubeh}(h]h ]h"]h$]h&]jj uh1jhj4]hhhjF]hM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0]hhhjF]hM)ubah}(h]j+]ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hj-]hhubj)}(hhh]j6)}(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.}(hjk^hji^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjf^hhubah}(h]h ]h"]h$]h&]uh1jhj-]hhhjF]hM)ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j^j3j^j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hj^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}(hhhj^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]j6)}(hload balance environmenth]hload balance environment}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^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}(hhhj^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]j6)}(hCstatistics of the sched_domain whose imbalance is to be calculated.h]hCstatistics of the sched_domain whose imbalance is to be calculated.}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhj=_hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj9_hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM}*ubj9)}(h h]h }(hhhjK_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9_hhhjJ_hM}*ubh)}(hhh]h)}(h sched_grouph]h sched_group}(hhhj\_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^_modnameN classnameNjajd)}jg]jj)}j]sched_balance_find_src_groupsbc.sched_balance_find_src_groupasbuh1hhj9_hhhjJ_hM}*ubj9)}(h h]h }(hhhj}_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9_hhhjJ_hM}*ubj~)}(hjh]h*}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9_hhhjJ_hM}*ubh)}(hsched_balance_find_src_grouph]h)}(hjz_h]hsched_balance_find_src_group}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9_hhhjJ_hM}*ubj)}(h(struct lb_env *env)h]j$)}(hstruct lb_env *envh](j')}(hj*h]hstruct}(hhhj_hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj_ubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubh)}(hhh]h)}(hlb_envh]hlb_env}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj_modnameN classnameNjajd)}jg]jx_c.sched_balance_find_src_groupasbuh1hhj_ubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubj~)}(hjh]h*}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubh)}(henvh]henv}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj_ubah}(h]h ]h"]h$]h&]jj uh1jhj9_hhhjJ_hM}*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5_hhhjJ_hM}*ubah}(h]j0_ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj2_hhubj)}(hhh]j6)}(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;`hj9`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM|*hj6`hhubah}(h]h ]h"]h$]h&]uh1jhj2_hhhjJ_hM}*ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jQ`j3jQ`j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj[`h]h Parameters}(hhhj]`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjY`ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjU`ubj)}(hhh]j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]j<)}(hjz`h]hstruct lb_env *env}(hhhj|`hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjx`ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM~*hjt`ubj)}(hhh]j6)}(hThe load balancing environment.h]hThe load balancing environment.}(hj`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hM~*hj`ubah}(h]h ]h"]h$]h&]uh1jhjt`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM~*hjq`ubah}(h]h ]h"]h$]h&]uh1jhjU`ubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjU`ubj6)}(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`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjU`ubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjU`ubh bullet_list)}(hhh]jo)}(h&The busiest group if imbalance exists.h]j6)}(hj`h]h&The busiest group if imbalance exists.}(hj`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj`ubah}(h]h ]h"]h$]h&]uh1jnhj`ubah}(h]h ]h"]h$]h&]bullet-uh1j`hjahM*hjU`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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)}(hj1ah]hDECLARE_COMPLETION}(hhhj;ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7aubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3ahhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK5ubah}(h]h ]h"]h$]h&]jj juh1hjjhj/ahhhjNahK5ubah}(h]j*aah ](jjeh"]h$]h&]juh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK4hj,ahhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,ahhhjNahK5ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jhaj3jhaj4uh1hhhhj$hNhNubj6)}(h``DECLARE_COMPLETION (work)``h]j<)}(hjnah]hDECLARE_COMPLETION (work)}(hhhjpahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlaubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK6hj$hhubjR)}(hhh]j6)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-hjaubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjah]h Parameters}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK1hjaubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]j<)}(hjah]hwork}(hhhjahhhNhNubah}(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]j6)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahK.hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahK.hjaubah}(h]h ]h"]h$]h&]uh1jhjaubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK0hjaubj6)}(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.}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK0hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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)}(hj;bh]hDECLARE_COMPLETION_ONSTACK}(hhhjEbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAbubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=bhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKDubah}(h]h ]h"]h$]h&]jj juh1hjjhj9bhhhjXbhKDubah}(h]j4bah ](jjeh"]h$]h&]juh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKChj6bhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj6bhhhjXbhKDubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jrbj3jrbj4uh1hhhhj$hNhNubj6)}(h%``DECLARE_COMPLETION_ONSTACK (work)``h]j<)}(hjxbh]h!DECLARE_COMPLETION_ONSTACK (work)}(hhhjzbhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjvbubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKEhj$hhubjR)}(hhh]j6)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=hjbubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(h**Parameters** ``work`` identifier for the completion structure **Description** This macro declares and initializes a completion structure on the kernel stack.h](j6)}(h**Parameters**h]jv)}(hjbh]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKAhjbubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]j<)}(hjbh]hwork}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjbubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK>hjbubj)}(hhh]j6)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhK>hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhK>hjbubah}(h]h ]h"]h$]h&]uh1jhjbubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK@hjbubj6)}(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.}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK@hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjKchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGchhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKOubj9)}(h h]h }(hhhjZchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGchhhjYchKOubh)}(hinit_completionh]h)}(hinit_completionh]hinit_completion}(hhhjlchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGchhhjYchKOubj)}(h(struct completion *x)h]j$)}(hstruct completion *xh](j')}(hj*h]hstruct}(hhhjchhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjcubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcubh)}(hhh]h)}(h completionh]h completion}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcmodnameN classnameNjajd)}jg]jj)}j]jncsbc.init_completionasbuh1hhjcubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcubh)}(hxh]hx}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjcubah}(h]h ]h"]h$]h&]jj uh1jhjGchhhjYchKOubeh}(h]h ]h"]h$]h&]jj juh1hjjhjCchhhjYchKOubah}(h]j>cah ](jjeh"]h$]h&]juh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKThj@chhubj)}(hhh]j6)}(h-Initialize a dynamically allocated completionh]h-Initialize a dynamically allocated completion}(hjdhj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNhj dhhubah}(h]h ]h"]h$]h&]uh1jhj@chhhjYchKOubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$dj3j$dj4uh1hhhhj$hNhNubjl)}(h**Parameters** ``struct completion *x`` pointer to completion structure that is to be initialized **Description** This inline function will initialize a dynamically created completion structure.h](j6)}(h**Parameters**h]jv)}(hj.dh]h Parameters}(hhhj0dhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,dubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKRhj(dubj)}(hhh]j)}(hS``struct completion *x`` pointer to completion structure that is to be initialized h](j)}(h``struct completion *x``h]j<)}(hjMdh]hstruct completion *x}(hhhjOdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKOhjGdubj)}(hhh]j6)}(h9pointer to completion structure that is to be initializedh]h9pointer to completion structure that is to be initialized}(hjhdhjfdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbdhKOhjcdubah}(h]h ]h"]h$]h&]uh1jhjGdubeh}(h]h ]h"]h$]h&]uh1jhjbdhKOhjDdubah}(h]h ]h"]h$]h&]uh1jhj(dubj6)}(h**Description**h]jv)}(hjdh]h Description}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKQhj(dubj6)}(hPThis inline function will initialize a dynamically created completion structure.h]hPThis inline function will initialize a dynamically created completion structure.}(hjdhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKQhj(dubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$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}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK\ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdhhhjdhK\ubh)}(hreinit_completionh]h)}(hreinit_completionh]hreinit_completion}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjdhK\ubj)}(h(struct completion *x)h]j$)}(hstruct completion *xh](j')}(hj*h]hstruct}(hhhj ehhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjeubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubh)}(hhh]h)}(h completionh]h completion}(hhhj(ehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%eubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*emodnameN classnameNjajd)}jg]jj)}j]jdsbc.reinit_completionasbuh1hhjeubj9)}(h h]h }(hhhjHehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubj~)}(hjh]h*}(hhhjVehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjeubh)}(hjch]hx}(hhhjcehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjeubah}(h]h ]h"]h$]h&]jj uh1jhjdhhhjdhK\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhK\ubah}(h]jdah ](jjeh"]h$]h&]juh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKahjdhhubj)}(hhh]j6)}(h#reinitialize a completion structureh]h#reinitialize a completion structure}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhK\ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK_hjeubj)}(hhh]j)}(hU``struct completion *x`` pointer to completion structure that is to be reinitialized h](j)}(h``struct completion *x``h]j<)}(hjeh]hstruct completion *x}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjeubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK\hjeubj)}(hhh]j6)}(h;pointer to completion structure that is to be reinitializedh]h;pointer to completion structure that is to be reinitialized}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehK\hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehK\hjeubah}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hj fh]h Description}(hhhj fhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK^hjeubj6)}(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.}(hj!fhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK^hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubeh}(h] delaying-and-scheduling-routinesah ]h"] delaying and scheduling routinesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTime and timer routinesh]hTime and timer routines}(hjBfhj@fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=fhhhhhK%ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_jiffies_64 (C function)c.get_jiffies_64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(hu64 get_jiffies_64 (void)h]h)}(hu64 get_jiffies_64(void)h](h)}(hhh]h)}(hu64h]hu64}(hhhjjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgfubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjlfmodnameN classnameNjajd)}jg]jj)}j]get_jiffies_64sbc.get_jiffies_64asbuh1hhjcfhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK]ubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcfhhhjfhK]ubh)}(hget_jiffies_64h]h)}(hjfh]hget_jiffies_64}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjcfhhhjfhK]ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjfubah}(h]h ]h"]h$]h&]jj uh1jhjcfhhhjfhK]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_fhhhjfhK]ubah}(h]jZfah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKchj\fhhubj)}(hhh]j6)}(h+read the 64-bit non-atomic jiffies_64 valueh]h+read the 64-bit non-atomic jiffies_64 value}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK\hjfhhubah}(h]h ]h"]h$]h&]uh1jhj\fhhhjfhK]ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jfj3jfj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK`hjgubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj%gh]hvoid}(hhhj'ghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj#gubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKchjgubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj@ghj>ghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:ghKchj;gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhj:ghKchjgubah}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hj`gh]h Description}(hhhjbghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^gubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKehjgubj6)}(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.}(hjxghjvghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK^hjgubj6)}(h **Return**h]jv)}(hjgh]hReturn}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKahjgubj6)}(hcurrent 64-bit jiffies valueh]hcurrent 64-bit jiffies value}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKahjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after (C macro) c.time_afterhNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h time_afterh]h)}(h time_afterh]h)}(h time_afterh]h)}(hjgh]h time_after}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghKubah}(h]jgah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjghhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjghhhjghKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jgj3jgj4uh1hhhhj=fhNhNubj6)}(h``time_after (a, b)``h]j<)}(hjhh]htime_after (a, b)}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=fhhubjR)}(hhh]j6)}(h+returns true if the time a is after time b.h]h+returns true if the time a is after time b.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjhubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7hh]h Parameters}(hhhj9hhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5hubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhj1hubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]j<)}(hjVhh]ha}(hhhjXhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjThubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKvhjPhubj)}(hhh]j6)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjqhhjohhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhhKvhjlhubah}(h]h ]h"]h$]h&]uh1jhjPhubeh}(h]h ]h"]h$]h&]uh1jhjkhhKvhjMhubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]j<)}(hjhh]hb}(hhhjhhhhNhNubah}(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.hhKwhjhubj)}(hhh]j6)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhKwhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhKwhjMhubeh}(h]h ]h"]h$]h&]uh1jhj1hubj6)}(h**Description**h]jv)}(hjhh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhj1hubj6)}(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.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhj1hubj6)}(h **Return**h]jv)}(hjhh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK}hj1hubj6)}(h8``true`` is time a is after time b, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhj ihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubh& is time a is after time b, otherwise }(h& is time a is after time b, otherwise hjihhhNhNubj<)}(h ``false``h]hfalse}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubh.}(hjPhjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK}hj1hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before (C macro) c.time_beforehNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h time_beforeh]h)}(h time_beforeh]h)}(h time_beforeh]h)}(hjQih]h time_before}(hhhj[ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjSihhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjOihhhjnihKubah}(h]jJiah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjLihhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjLihhhjnihKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jij3jij4uh1hhhhj=fhNhNubj6)}(h``time_before (a, b)``h]j<)}(hjih]htime_before (a, b)}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=fhhubjR)}(hhh]j6)}(h,returns true if the time a is before time b.h]h,returns true if the time a is before time b.}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjih]h Parameters}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hY/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<)}(hjih]ha}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubj)}(hhh]j6)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihKhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihKhjiubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]j<)}(hjjh]hb}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjjubj)}(hhh]j6)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hj5jhj3jhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/jhKhj0jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj/jhKhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h **Return**h]jv)}(hjUjh]hReturn}(hhhjWjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubj6)}(h9``true`` is time a is before time b, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjojhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkjubh' is time a is before time b, otherwise }(h' is time a is before time b, otherwise hjkjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkjubh.}(hjPhjkjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after_eq (C macro)c.time_after_eqhNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(hjjh]h time_after_eq}(hhhjjhhhNhNubah}(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 juh1hjjhjjhhhjjhKubah}(h]jjah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjjhhhjjhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jjj3jjj4uh1hhhhj=fhNhNubj6)}(h``time_after_eq (a, b)``h]j<)}(hjjh]htime_after_eq (a, b)}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=fhhubjR)}(hhh]j6)}(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.}(hj khj khhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjkubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&kh]h Parameters}(hhhj(khhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$kubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj kubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]j<)}(hjEkh]ha}(hhhjGkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj?kubj)}(hhh]j6)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hj`khj^khhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZkhKhj[kubah}(h]h ]h"]h$]h&]uh1jhj?kubeh}(h]h ]h"]h$]h&]uh1jhjZkhKhjqubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j<)}(hjqh]hb}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj~qubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjzqubj)}(hhh]j6)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjzqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhj>qubeh}(h]h ]h"]h$]h&]uh1jhj"qubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj"qubj6)}(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()).}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj"qubj6)}(h **Return**h]jv)}(hjqh]hReturn}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj"qubj6)}(h8``true`` is time a is after time b, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubh& is time a is after time b, otherwise }(h& is time a is after time b, otherwise hjqhhhNhNubj<)}(h ``false``h]hfalse}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubh.}(hjPhjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj"qubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before64 (C macro)c.time_before64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h time_before64h]h)}(h time_before64h]h)}(h time_before64h]h)}(hjBrh]h time_before64}(hhhjLrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDrhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj@rhhhj_rhKubah}(h]j;rah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=rhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj=rhhhj_rhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jyrj3jyrj4uh1hhhhj=fhNhNubj6)}(h``time_before64 (a, b)``h]j<)}(hjrh]htime_before64 (a, b)}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}rubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=fhhubjR)}(hhh]j6)}(h,returns true if the time a is before time b.h]h,returns true if the time a is before time b.}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubj)}(hhh](j)}(h ``a`` first comparable as __u64 h](j)}(h``a``h]j<)}(hjrh]ha}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubj)}(hhh]j6)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhKhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhKhjrubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j<)}(hj sh]hb}(hhhj shhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj subah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubj)}(hhh]j6)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hj&shj$shhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj shKhj!subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhj shKhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubj6)}(h**Description**h]jv)}(hjFsh]h Description}(hhhjHshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDsubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubj6)}(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()).}(hj^shj\shhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubj6)}(h **Return**h]jv)}(hjmsh]hReturn}(hhhjoshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjksubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubj6)}(h9``true`` is time a is before time b, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubh' is time a is before time b, otherwise }(h' is time a is before time b, otherwise hjshhhNhNubj<)}(h ``false``h]hfalse}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubh.}(hjPhjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after_eq64 (C macro)c.time_after_eq64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(htime_after_eq64h]h)}(htime_after_eq64h]h)}(htime_after_eq64h]h)}(hjsh]htime_after_eq64}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjshKubah}(h]jsah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjshhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjshhhjshKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhj=fhNhNubj6)}(h``time_after_eq64 (a, b)``h]j<)}(hj th]htime_after_eq64 (a, b)}(hhhj thhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj=fhhubjR)}(hhh]j6)}(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.}(hj%thj#thhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj tubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj>th]h Parameters}(hhhj@thhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|h]htime_is_after_jiffies64 (a)}(hhhj@|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj<|ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj=fhhubjR)}(hhh]j6)}(h$return true if a is after jiffies_64h]h$return true if a is after jiffies_64}(hjY|hjW|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjT|ubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is after jiffies_64, otherwise ``false``.h](j6)}(h**Parameters**h]jv)}(hjr|h]h Parameters}(hhhjt|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp|ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjl|ubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]j<)}(hj|h]ha}(hhhj|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.hhMhj|ubj)}(hhh]j6)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhjl|ubj6)}(h **Return**h]jv)}(hj|h]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjl|ubj6)}(h<``true`` is time a is after jiffies_64, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh* is time a is after jiffies_64, otherwise }(h* is time a is after jiffies_64, otherwise hj|hhhNhNubj<)}(h ``false``h]hfalse}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh.}(hjPhj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjl|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#time_is_before_eq_jiffies (C macro)c.time_is_before_eq_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhj6}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2}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*}hhhjI}hM%ubah}(h]j%}ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM$hj'}hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj'}hhhjI}hM%ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jc}j3jc}j4uh1hhhhj=fhNhNubj6)}(h!``time_is_before_eq_jiffies (a)``h]j<)}(hji}h]htime_is_before_eq_jiffies (a)}(hhhjk}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjg}ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM&hj=fhhubjR)}(hhh]j6)}(h.return true if a is before or equal to jiffiesh]h.return true if a is before or equal to jiffies}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj}ubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj}h]h Parameters}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hj}ubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j<)}(hj}h]ha}(hhhj}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]j6)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}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}ubj6)}(h **Return**h]jv)}(hj}h]hReturn}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"hj}ubj6)}(hI``true`` is time a is before or the same as jiffies, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ~ubh7 is time a is before or the same as jiffies, otherwise }(h7 is time a is before or the same as jiffies, otherwise hj ~hhhNhNubj<)}(h ``false``h]hfalse}(hhhj$~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ~ubh.}(hjPhj ~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%time_is_before_eq_jiffies64 (C macro)c.time_is_before_eq_jiffies64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]h)}(hjW~h]htime_is_before_eq_jiffies64}(hhhja~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjY~hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM,ubah}(h]h ]h"]h$]h&]jj juh1hjjhjU~hhhjt~hM,ubah}(h]jP~ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM+hjR~hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjR~hhhjt~hM,ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhj=fhNhNubj6)}(h#``time_is_before_eq_jiffies64 (a)``h]j<)}(hj~h]htime_is_before_eq_jiffies64 (a)}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj~ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM-hj=fhhubjR)}(hhh]j6)}(h1return true if a is before or equal to jiffies_64h]h1return true if a is before or equal to jiffies_64}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM&hj~ubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hY/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}(hhhj~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]j6)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~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~ubj6)}(h **Return**h]jv)}(hj"h]hReturn}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM)hj~ubj6)}(hI``true`` is time a is before or the same jiffies_64, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubh7 is time a is before or the same jiffies_64, otherwise }(h7 is time a is before or the same jiffies_64, otherwise hj8hhhNhNubj<)}(h ``false``h]hfalse}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubh.}(hjPhj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM)hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"time_is_after_eq_jiffies (C macro)c.time_is_after_eq_jiffieshNtauh1hhj=fhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(hjh]htime_is_after_eq_jiffies}(hhhjhhhNhNubah}(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.hhM4ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM4ubah}(h]j{ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM3hj}hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj}hhhjhM4ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubj6)}(h ``time_is_after_eq_jiffies (a)``h]j<)}(hjh]htime_is_after_eq_jiffies (a)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hj=fhhubjR)}(hhh]j6)}(h-return true if a is after or equal to jiffiesh]h-return true if a is after or equal to jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM.hjubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hjubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j<)}(hjh]ha}(hhhjhhhNhNubah}(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.hhM/hj ubj)}(hhh]j6)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM/hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM/hj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hjubj6)}(hH``true`` is time a is after or the same as jiffies, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubh6 is time a is after or the same as jiffies, otherwise }(h6 is time a is after or the same as jiffies, otherwise hjchhhNhNubj<)}(h ``false``h]hfalse}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubh.}(hjPhjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$time_is_after_eq_jiffies64 (C macro)c.time_is_after_eq_jiffies64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(hjh]htime_is_after_eq_jiffies64}(hhhjhhhNhNubah}(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.hhM;ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjʀhM;ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM:hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjʀhM;ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubj6)}(h"``time_is_after_eq_jiffies64 (a)``h]j<)}(hjh]htime_is_after_eq_jiffies64 (a)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM<hj=fhhubjR)}(hhh]j6)}(h0return true if a is after or equal to jiffies_64h]h0return true if a is after or equal to jiffies_64}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjubah}(h]h ]h"]h$]h&]uh1jQhj=fhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/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}(hhhj?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.hhM6hj7ubj)}(hhh]j6)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhM6hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM6hj4ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjxh]hReturn}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hjubj6)}(hK``true`` is time a is after or the same as jiffies_64, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh9 is time a is after or the same as jiffies_64, otherwise }(h9 is time a is after or the same as jiffies_64, otherwise hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_nsecs (C function)c.jiffies_to_nsecshNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjށubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jiffies_to_nsecssbc.jiffies_to_nsecsasbuh1hhjځhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjځhhhjhMubh)}(hjiffies_to_nsecsh]h)}(hjh]hjiffies_to_nsecs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjځhhhjhMubj)}(h(const unsigned long j)h]j$)}(hconst unsigned long jh](j')}(hjn'h]hconst}(hhhj0hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj,ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj)}(hunsignedh]hunsigned}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj)}(hlongh]hlong}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubh)}(hjh]hj}(hhhjhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjӁhhubj)}(hhh]j6)}(hConvert jiffies to nanosecondsh]hConvert jiffies to nanoseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjӁhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jƂj3jƂj4uh1hhhhj=fhNhNubjl)}(hX**Parameters** ``const unsigned long j`` jiffies value **Return** nanoseconds valueh](j6)}(h**Parameters**h]jv)}(hjЂh]h Parameters}(hhhj҂hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj΂ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjʂubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j<)}(hjh]hconst unsigned long j}(hhhjhhhNhNubah}(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]j6)}(h jiffies valueh]h jiffies value}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʂubj6)}(h **Return**h]jv)}(hj*h]hReturn}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjʂubj6)}(hnanoseconds valueh]hnanoseconds value}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjʂubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmsecs_to_jiffies (C function)c.msecs_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkhhhj}hMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkhhhj}hMubh)}(hmsecs_to_jiffiesh]h)}(hmsecs_to_jiffiesh]hmsecs_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hMubj)}(h(const unsigned int m)h]j$)}(hconst unsigned int mh](j')}(hjn'h]hconst}(hhhjȃhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjăubj9)}(h h]h }(hhhjՃhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjăubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjăubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjăubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjăubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjăubh)}(hmh]hm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjăubeh}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdhhubj)}(hhh]j`)}(hhh]jo)}(hconvert milliseconds to jiffiesh]j6)}(hjKh]hconvert milliseconds to jiffies}(hjKhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjIubah}(h]h ]h"]h$]h&]uh1jnhjFhhhjZhNubah}(h]h ]h"]h$]h&]jajauh1j`hjZhMhjChhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]j<)}(hjh]hconst unsigned int m}(hhhjhhhNhNubah}(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]j6)}(htime in millisecondsh]htime in milliseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubj6)}(h**Description**h]jv)}(hjԄh]h Description}(hhhjքhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj҄ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubj6)}(hconversion is done as follows:h]hconversion is done as follows:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubj`)}(hhh](jo)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]j6)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(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]j6)}(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()}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajauh1j`hjhMhjtubj6)}(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.}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubj6)}(h **Return**h]jv)}(hj^h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubj6)}(h jiffies valueh]h jiffies value}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌusecs_to_jiffies (C function)c.usecs_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM!ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM!ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM!ubj9)}(h h]h }(hhhj΅hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM!ubh)}(husecs_to_jiffiesh]h)}(husecs_to_jiffiesh]husecs_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj܅ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM!ubj)}(h(const unsigned int u)h]j$)}(hconst unsigned int uh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(huh]hu}(hhhjOhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM7hjhhubj)}(hhh]j`)}(hhh]jo)}(hconvert microseconds to jiffiesh]j6)}(hjh]hconvert microseconds to jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hj}ubah}(h]h ]h"]h$]h&]uh1jnhjzhhhjhNubah}(h]h ]h"]h$]h&]jajauh1j`hjhM hjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM!ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM$hjubj)}(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}(hhhjφ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!hjdžubj)}(hhh]j6)}(htime in microsecondsh]htime in microseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjdžubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjĆubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hjubj6)}(hconversion is done as follows:h]hconversion is done as follows:}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hjubj`)}(hhh](jo)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j6)}(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.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM%hj0ubah}(h]h ]h"]h$]h&]uh1jnhj-ubjo)}(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]j6)}(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.}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM(hjIubah}(h]h ]h"]h$]h&]uh1jnhj-ubeh}(h]h ]h"]h$]h&]jajauh1j`hjBhM%hjubj6)}(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.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM,hjubj6)}(h **Return**h]jv)}(hjyh]hReturn}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjubj6)}(h jiffies valueh]h jiffies value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrubj9)}(h h]h }(hhhj͇hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj̇hMrubj)}(hinth]hint}(hhhjۇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̇hMrubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj̇hMrubh)}(hjiffies_to_msecsh]h)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj̇hMrubj)}(h(const unsigned long j)h]j$)}(hconst unsigned long jh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjh]hj}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj̇hMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj̇hMrubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMyhjhhubj)}(hhh]j6)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̇hMrubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(h**Parameters** ``const unsigned long j`` jiffies value **Description** Avoid unnecessary multiplications/divisions in the two most common HZ cases. **Return** milliseconds valueh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j<)}(hjՈh]hconst unsigned long j}(hhhj׈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.chMrhjψubj)}(hhh]j6)}(h jiffies valueh]h jiffies value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjψubeh}(h]h ]h"]h$]h&]uh1jhjhMrhj̈ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMthjubj6)}(hLAvoid unnecessary multiplications/divisions in the two most common HZ cases.h]hLAvoid unnecessary multiplications/divisions in the two most common HZ cases.}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMthjubj6)}(h **Return**h]jv)}(hj7h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMwhjubj6)}(hmilliseconds valueh]hmilliseconds value}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhj=fhhhNhNubh)}(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}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjhMubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjhMubh)}(hjiffies_to_usecsh]h)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhMubj)}(h(const unsigned long j)h]j$)}(hconst unsigned long jh](j')}(hjn'h]hconst}(hhhjՉhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjщubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjщubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjщubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjщubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjщubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjщubh)}(hjh]hj}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjщubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj͉ubah}(h]h ]h"]h$]h&]jj uh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjqhhubj)}(hhh]j6)}(hConvert jiffies to microsecondsh]hConvert jiffies to microseconds}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jjj3jjj4uh1hhhhj=fhNhNubjl)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](j6)}(h**Parameters**h]jv)}(hjth]h Parameters}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j<)}(hjh]hconst unsigned long j}(hhhjhhhNhNubah}(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]j6)}(h jiffies valueh]h jiffies value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubj6)}(h **Return**h]jv)}(hjΊh]hReturn}(hhhjЊhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj̊ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubj6)}(hmicroseconds valueh]hmicroseconds value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmktime64 (C function) c.mktime64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]mktime64sb c.mktime64asbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj7hMubh)}(hmktime64h]h)}(hj4h]hmktime64}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj7hMubj)}(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')}(hjn'h]hconst}(hhhjehhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjaubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(hyear0h]hyear0}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hconst unsigned int mon0h](j')}(hjn'h]hconst}(hhhjыhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj͋ubj9)}(h h]h }(hhhjދhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj͋ubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͋ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj͋ubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͋ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj͋ubh)}(hmon0h]hmon0}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͋ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hconst unsigned int dayh](j')}(hjn'h]hconst}(hhhj=hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj9ubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubj)}(hunsignedh]hunsigned}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubj)}(hinth]hint}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubh)}(hdayh]hday}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hconst unsigned int hourh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjҌhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhourh]hhour}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hconst unsigned int minh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hminh]hmin}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hconst unsigned int sech](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjƍhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hsech]hsec}(hhhjԍhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(hConverts date to seconds.h]hConverts date to seconds.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(h-``const unsigned int year0`` year to convert h](j)}(h``const unsigned int year0``h]j<)}(hj@h]hconst unsigned int year0}(hhhjBhhhNhNubah}(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]j6)}(hyear to converth]hyear to convert}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h-``const unsigned int mon0`` month to convert h](j)}(h``const unsigned int mon0``h]j<)}(hjyh]hconst unsigned int mon0}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjsubj)}(hhh]j6)}(hmonth to converth]hmonth to convert}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(h*``const unsigned int day`` day to convert h](j)}(h``const unsigned int day``h]j<)}(hjh]hconst unsigned int day}(hhhjhhhNhNubah}(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]j6)}(hday to converth]hday to convert}(hj͎hjˎhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjǎhMhjȎubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǎhMhj7ubj)}(h,``const unsigned int hour`` hour to convert h](j)}(h``const unsigned int hour``h]j<)}(hjh]hconst unsigned int hour}(hhhjhhhNhNubah}(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]j6)}(hhour to converth]hhour to convert}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(h-``const unsigned int min`` minute to convert h](j)}(h``const unsigned int min``h]j<)}(hj$h]hconst unsigned int min}(hhhj&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]j6)}(hminute to converth]hminute to convert}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj7ubj)}(h-``const unsigned int sec`` second to convert h](j)}(h``const unsigned int sec``h]j<)}(hj]h]hconst unsigned int sec}(hhhj_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.chMhjWubj)}(hhh]j6)}(hsecond to converth]hsecond to convert}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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.]}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h6This algorithm was first published by Gauss (I think).h]h6This algorithm was first published by Gauss (I think).}(hjΏhj̏hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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ݏhjۏhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h5seconds since the epoch time for the given input dateh]h5seconds since the epoch time for the given input date}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&set_normalized_timespec64 (C function)c.set_normalized_timespec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhjNhMubh)}(hset_normalized_timespec64h]h)}(hset_normalized_timespec64h]hset_normalized_timespec64}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjNhMubj)}(h/(struct timespec64 *ts, time64_t sec, s64 nsec)h](j$)}(hstruct timespec64 *tsh](j')}(hj*h]hstruct}(hhhj}hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjyubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jcsbc.set_normalized_timespec64asbuh1hhjyubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubj~)}(hjh]h*}(hhhjɐhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyubh)}(htsh]hts}(hhhj֐hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjuubj$)}(h time64_t sech](h)}(hhh]h)}(htime64_th]htime64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.set_normalized_timespec64asbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsech]hsec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjuubj$)}(hs64 nsech](h)}(hhh]h)}(hs64h]hs64}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<modnameN classnameNjajd)}jg]jc.set_normalized_timespec64asbuh1hhj3ubj9)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubh)}(hnsech]hnsec}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjuubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhjNhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjNhMubah}(h]j3ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj5hhubj)}(hhh]j6)}(h-set timespec sec and nsec parts and normalizeh]h-set timespec sec and nsec parts and normalize}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjNhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/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<)}(hjґh]hstruct timespec64 *ts}(hhhjԑ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]j6)}(h&pointer to timespec variable to be seth]h&pointer to timespec variable to be set}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̑ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɑubj)}(h ``time64_t sec`` seconds to set h](j)}(h``time64_t sec``h]j<)}(hj h]h time64_t sec}(hhhj 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]j6)}(hseconds to seth]hseconds to set}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjɑubj)}(h ``s64 nsec`` nanoseconds to set h](j)}(h ``s64 nsec``h]j<)}(hjDh]hs64 nsec}(hhhjFhhhNhNubah}(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.chMhj>ubj)}(hhh]j6)}(hnanoseconds to seth]hnanoseconds to set}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjɑubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(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 !}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌns_to_timespec64 (C function)c.ns_to_timespec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]ns_to_timespec64sbc.ns_to_timespec64asbuh1hhjhhhjhMubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hns_to_timespec64h]h)}(hj(h]hns_to_timespec64}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h (s64 nsec)h]j$)}(hs64 nsech](h)}(hhh]h)}(hs64h]hs64}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]j&c.ns_to_timespec64asbuh1hhjTubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTubh)}(hnsech]hnsec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jޒah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjhhubj)}(hhh]j6)}(h!Convert nanoseconds to timespec64h]h!Convert nanoseconds to timespec64}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/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&]j1j,j2jʓj3jʓj4uh1hhhhj=fhNhNubjl)}(h**Parameters** ``s64 nsec`` the nanoseconds value to be converted **Return** the timespec64 representation of the nsec parameter.h](j6)}(h**Parameters**h]jv)}(hjԓh]h Parameters}(hhhj֓hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjғubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjΓubj)}(hhh]j)}(h3``s64 nsec`` the nanoseconds value to be converted h](j)}(h ``s64 nsec``h]j<)}(hjh]hs64 nsec}(hhhjhhhNhNubah}(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]j6)}(h%the nanoseconds value to be convertedh]h%the nanoseconds value to be converted}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjΓubj6)}(h **Return**h]jv)}(hj.h]hReturn}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjΓubj6)}(h4the timespec64 representation of the nsec parameter.h]h4the timespec64 representation of the nsec parameter.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjΓubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__msecs_to_jiffies (C function)c.__msecs_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM#ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjohhhjhM#ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhM#ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjohhhjhM#ubh)}(h__msecs_to_jiffiesh]h)}(h__msecs_to_jiffiesh]h__msecs_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjhM#ubj)}(h(const unsigned int m)h]j$)}(hconst unsigned int mh](j')}(hjn'h]hconst}(hhhj̔hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjȔubj9)}(h h]h }(hhhjٔhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjȔubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȔubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjȔubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȔubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjȔubh)}(hjh]hm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȔubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjĔubah}(h]h ]h"]h$]h&]jj uh1jhjohhhjhM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjhM#ubah}(h]jfah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM;hjhhhubj)}(hhh]j`)}(hhh]jo)}(hconvert milliseconds to jiffiesh]j6)}(hjNh]hconvert milliseconds to jiffies}(hjNhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM"hjLubah}(h]h ]h"]h$]h&]uh1jnhjIhhhj]hNubah}(h]h ]h"]h$]h&]jajauh1j`hj]hM"hjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhM#ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jsj3jsj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj}h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM&hjwubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]j<)}(hjh]hconst unsigned int m}(hhhjhhhNhNubah}(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]j6)}(htime in millisecondsh]htime in milliseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjwubj6)}(h**Description**h]jv)}(hjוh]h Description}(hhhjٕhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjՕubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM%hjwubj6)}(hconversion is done as follows:h]hconversion is done as follows:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM%hjwubj`)}(hhh](jo)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]j6)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM'hjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM)hjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(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]j6)}(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()}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM,hj1ubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajauh1j`hjhM'hjwubj6)}(hXy__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.hh]hXy__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}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM1hjwubj6)}(h **Return**h]jv)}(hjah]hReturn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM9hjwubj6)}(h jiffies valueh]h jiffies value}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM9hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__usecs_to_jiffies (C function)c.__usecs_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMHubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMHubj)}(hlongh]hlong}(hhhjÖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMHubj9)}(h h]h }(hhhjіhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMHubh)}(h__usecs_to_jiffiesh]h)}(h__usecs_to_jiffiesh]h__usecs_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߖubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMHubj)}(h(const unsigned int u)h]j$)}(hconst unsigned int uh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjQh]hu}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMHubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMHubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMLhjhhubj)}(hhh]j`)}(hhh]jo)}(hconvert microseconds to jiffiesh]j6)}(hjh]hconvert microseconds to jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMGhjubah}(h]h ]h"]h$]h&]uh1jnhj|hhhjhNubah}(h]h ]h"]h$]h&]jajauh1j`hjhMGhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMHubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hZ**Parameters** ``const unsigned int u`` time in milliseconds **Return** jiffies valueh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMKhjubj)}(hhh]j)}(h.``const unsigned int u`` time in milliseconds h](j)}(h``const unsigned int u``h]j<)}(hjϗh]hconst unsigned int u}(hhhjї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.chMHhjɗubj)}(hhh]j6)}(htime in millisecondsh]htime in milliseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjɗubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjƗubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMJhjubj6)}(h jiffies valueh]h jiffies value}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"timespec64_to_jiffies (C function)c.timespec64_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMVubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKhhhj]hMVubj)}(hlongh]hlong}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj]hMVubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKhhhj]hMVubh)}(htimespec64_to_jiffiesh]h)}(htimespec64_to_jiffiesh]htimespec64_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj]hMVubj)}(h (const struct timespec64 *value)h]j$)}(hconst struct timespec64 *valueh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjØhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjИhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޘubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.timespec64_to_jiffiesasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hvalueh]hvalue}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjKhhhj]hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhj]hMVubah}(h]jBah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhhjDhhubj)}(hhh]j6)}(h%convert a timespec64 value to jiffiesh]h%convert a timespec64 value to jiffies}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMUhjDhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hMVubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j_j3j_j4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjih]h Parameters}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMYhjcubj)}(hhh]j)}(hW``const struct timespec64 *value`` pointer to :c:type:`struct timespec64 ` h](j)}(h"``const struct timespec64 *value``h]j<)}(hjh]hconst struct timespec64 *value}(hhhjhhhNhNubah}(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.chMVhjubj)}(hhh]j6)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(h pointer to hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hjh]hstruct timespec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhjhMVhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjcubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMXhjcubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMXhjcubj6)}(h-Rather, we just shift the bits off the right.h]h-Rather, we just shift the bits off the right.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMahjcubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMchjcubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMfhjcubj6)}(h jiffies valueh]h jiffies value}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMfhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"jiffies_to_timespec64 (C function)c.jiffies_to_timespec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{ubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjihhhj{hM{ubh)}(hjiffies_to_timespec64h]h)}(hjiffies_to_timespec64h]hjiffies_to_timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj{hM{ubj)}(h7(const unsigned long jiffies, struct timespec64 *value)h](j$)}(hconst unsigned long jiffiesh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hunsignedh]hunsigned}(hhhjŚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjӚhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjiffiesh]hjiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct timespec64 *valueh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj6modnameN classnameNjajd)}jg]jj)}j]jsbc.jiffies_to_timespec64asbuh1hhjubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hvalueh]hvalue}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM~hjbhhubj)}(hhh]j6)}(hAconvert jiffies value to :c:type:`struct timespec64 `h](hconvert jiffies value to }(hconvert jiffies value to hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hjh]hstruct timespec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]jPc.jiffies_to_timespec64asbj timespec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMzhjubeh}(h]h ]h"]h$]h&]uh1j5hjǛhMzhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hM{ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jכj3jכj4uh1hhhhj=fhNhNubjl)}(h**Parameters** ``const unsigned long jiffies`` jiffies value ``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߛubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM~hjۛubj)}(hhh](j)}(h.``const unsigned long jiffies`` jiffies value h](j)}(h``const unsigned long jiffies``h]j<)}(hjh]hconst unsigned long jiffies}(hhhjhhhNhNubah}(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]j6)}(h jiffies valueh]h jiffies value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(hP``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](j)}(h``struct timespec64 *value``h]j<)}(hj9h]hstruct timespec64 *value}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM}hj3ubj)}(hhh]j6)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(h pointer to hjRhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hj]h]hstruct timespec64}(hhhj_hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM|hjRubeh}(h]h ]h"]h$]h&]uh1j5hjzhM|hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjۛubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_clock_t (C function)c.jiffies_to_clock_thNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jiffies_to_clock_tsbc.jiffies_to_clock_tasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj؜hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjלhMubh)}(hjiffies_to_clock_th]h)}(hjԜh]hjiffies_to_clock_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjלhMubj)}(h(unsigned long x)h]j$)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjch]hx}(hhhj=hhhNhNubah}(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]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(hConvert jiffies to clock_th]hConvert jiffies to clock_t}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjלhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hn**Parameters** ``unsigned long x`` jiffies value **Return** jiffies converted to clock_t (CLOCKS_PER_SEC)h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/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}(hhhjhhhNhNubah}(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]j6)}(h jiffies valueh]h jiffies value}(hjÝhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h-jiffies converted to clock_t (CLOCKS_PER_SEC)h]h-jiffies converted to clock_t (CLOCKS_PER_SEC)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclock_t_to_jiffies (C function)c.clock_t_to_jiffieshNtauh1hhj=fhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$hhhj6hMubj)}(hlongh]hlong}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hMubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$hhhj6hMubh)}(hclock_t_to_jiffiesh]h)}(hclock_t_to_jiffiesh]hclock_t_to_jiffies}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj6hMubj)}(h(unsigned long x)h]j$)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hjch]hx}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjyubah}(h]h ]h"]h$]h&]jj uh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(hConvert clock_t to jiffiesh]hConvert clock_t to jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hc**Parameters** ``unsigned long x`` clock_t value **Return** clock_t value converted to jiffiesh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h"``unsigned long x`` clock_t value h](j)}(h``unsigned long x``h]j<)}(hj$h]hunsigned long x}(hhhj&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]j6)}(h clock_t valueh]h clock_t value}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hj_h]hReturn}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h"clock_t value converted to jiffiesh]h"clock_t value converted to jiffies}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"jiffies_64_to_clock_t (C function)c.jiffies_64_to_clock_thNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h!u64 jiffies_64_to_clock_t (u64 x)h]h)}(h u64 jiffies_64_to_clock_t(u64 x)h](h)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jiffies_64_to_clock_tsbc.jiffies_64_to_clock_tasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjɟhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjȟhMubh)}(hjiffies_64_to_clock_th]h)}(hjşh]hjiffies_64_to_clock_t}(hhhj۟hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjןubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjȟhMubj)}(h(u64 x)h]j$)}(hu64 xh](h)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jßc.jiffies_64_to_clock_tasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjch]hx}(hhhj%hhhNhNubah}(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]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(hConvert jiffies_64 to clock_th]hConvert jiffies_64 to clock_t}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjȟhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jgj3jgj4uh1hhhhj=fhNhNubjl)}(hy**Parameters** ``u64 x`` jiffies_64 value **Return** jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)h](j6)}(h**Parameters**h]jv)}(hjqh]h Parameters}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjkubj)}(hhh]j)}(h``u64 x`` jiffies_64 value h](j)}(h ``u64 x``h]j<)}(hjh]hu64 x}(hhhjhhhNhNubah}(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]j6)}(hjiffies_64 valueh]hjiffies_64 value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubj6)}(h **Return**h]jv)}(hjˠh]hReturn}(hhhj͠hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjɠubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjkubj6)}(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)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies64_to_nsecs (C function)c.jiffies64_to_nsecshNtauh1hhj=fhhhNhNubh)}(hhh](h)}(hu64 jiffies64_to_nsecs (u64 j)h]h)}(hu64 jiffies64_to_nsecs(u64 j)h](h)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jiffies64_to_nsecssbc.jiffies64_to_nsecsasbuh1hhj hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj4hMubh)}(hjiffies64_to_nsecsh]h)}(hj1h]hjiffies64_to_nsecs}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj4hMubj)}(h(u64 j)h]j$)}(hu64 jh](h)}(hhh]h)}(hu64h]hu64}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgmodnameN classnameNjajd)}jg]j/c.jiffies64_to_nsecsasbuh1hhj^ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubh)}(hjh]hj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjZubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(h Convert jiffies64 to nanosecondsh]h Convert jiffies64 to nanoseconds}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jӡj3jӡj4uh1hhhhj=fhNhNubjl)}(hJ**Parameters** ``u64 j`` jiffies64 value **Return** nanoseconds valueh](j6)}(h**Parameters**h]jv)}(hjݡh]h Parameters}(hhhjߡhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjۡubah}(h]h ]h"]h$]h&]uh1j5hT/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<)}(hjh]hu64 j}(hhhjhhhNhNubah}(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]j6)}(hjiffies64 valueh]hjiffies64 value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjסubj6)}(h **Return**h]jv)}(hj7h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjסubj6)}(hnanoseconds valueh]hnanoseconds value}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjסubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies64_to_msecs (C function)c.jiffies64_to_msecshNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jiffies64_to_msecssbc.jiffies64_to_msecsasbuh1hhjxhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjhMubh)}(hjiffies64_to_msecsh]h)}(hjh]hjiffies64_to_msecs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhMubj)}(h (const u64 j)h]j$)}(h const u64 jh](j')}(hjn'h]hconst}(hhhj΢hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjʢubj9)}(h h]h }(hhhjۢhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjʢubh)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.jiffies64_to_msecsasbuh1hhjʢubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjʢubh)}(hjh]hj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʢubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjƢubah}(h]h ]h"]h$]h&]jj uh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjqhhubj)}(hhh]j6)}(h!Convert jiffies64 to millisecondsh]h!Convert jiffies64 to milliseconds}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhj=fhNhNubjl)}(hQ**Parameters** ``const u64 j`` jiffies64 value **Return** milliseconds valueh](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj^ubj)}(hhh]j)}(h ``const u64 j`` jiffies64 value h](j)}(h``const u64 j``h]j<)}(hjh]h const u64 j}(hhhjhhhNhNubah}(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]j6)}(hjiffies64 valueh]hjiffies64 value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj^ubj6)}(hmilliseconds valueh]hmilliseconds value}(hj֣hjԣhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnsecs_to_jiffies64 (C function)c.nsecs_to_jiffies64hNtauh1hhj=fhhhNhNubh)}(hhh](h)}(hu64 nsecs_to_jiffies64 (u64 n)h]h)}(hu64 nsecs_to_jiffies64(u64 n)h](h)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]nsecs_to_jiffies64sbc.nsecs_to_jiffies64asbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj'hMubh)}(hnsecs_to_jiffies64h]h)}(hj$h]hnsecs_to_jiffies64}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hMubj)}(h(u64 n)h]j$)}(hu64 nh](h)}(hhh]h)}(hu64h]hu64}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjZmodnameN classnameNjajd)}jg]j"c.nsecs_to_jiffies64asbuh1hhjQubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQubh)}(hhh]hn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj'hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(h!Convert nsecs in u64 to jiffies64h]h!Convert nsecs in u64 to jiffies64}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/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&]j1j,j2jƤj3jƤj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjФh]h Parameters}(hhhjҤhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjΤubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]j<)}(hjh]hu64 n}(hhhjhhhNhNubah}(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]j6)}(h nsecs in u64h]h nsecs in u64}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʤubj6)}(h**Description**h]jv)}(hj*h]h Description}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubj6)}(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.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubj6)}(h**note**h]jv)}(hjQh]hnote}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubjR)}(hhh]j6)}(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}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjgubah}(h]h ]h"]h$]h&]uh1jQhjʤubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubj6)}(h"nsecs converted to jiffies64 valueh]h"nsecs converted to jiffies64 value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjʤubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnsecs_to_jiffies (C function)c.nsecs_to_jiffieshNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h&unsigned long nsecs_to_jiffies (u64 n)h]h)}(h%unsigned long nsecs_to_jiffies(u64 n)h](j)}(hunsignedh]hunsigned}(hhhjƥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¥hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM0ubj9)}(h h]h }(hhhjեhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¥hhhjԥhM0ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¥hhhjԥhM0ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¥hhhjԥhM0ubh)}(hnsecs_to_jiffiesh]h)}(hnsecs_to_jiffiesh]hnsecs_to_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj¥hhhjԥhM0ubj)}(h(u64 n)h]j$)}(hu64 nh](h)}(hhh]h)}(hu64h]hu64}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj$modnameN classnameNjajd)}jg]jj)}j]jsbc.nsecs_to_jiffiesasbuh1hhjubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]hn}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj¥hhhjԥhM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjԥhM0ubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM=hjhhubj)}(hhh]j6)}(hConvert nsecs in u64 to jiffiesh]hConvert nsecs in u64 to jiffies}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM/hjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjԥhM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM3hjubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]j<)}(hjh]hu64 n}(hhhjhhhNhNubah}(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.chM1hjubj)}(hhh]j6)}(h nsecs in u64h]h nsecs in u64}(hj֦hjԦhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjЦhM1hjѦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЦhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM3hjubj6)}(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.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM3hjubj6)}(h**note**h]jv)}(hjh]hnote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM7hjubjR)}(hhh]j6)}(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}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM9hj3ubah}(h]h ]h"]h$]h&]uh1jQhjubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM<hjubj6)}(h nsecs converted to jiffies valueh]h nsecs converted to jiffies value}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_timespec64 (C function)c.get_timespec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM`ubh)}(hget_timespec64h]h)}(hget_timespec64h]hget_timespec64}(hhhjhhhNhNubah}(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}(hhhjϧhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj˧ubj9)}(h h]h }(hhhjܧhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj˧ubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.get_timespec64asbuh1hhj˧ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj˧ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj˧ubh)}(htsh]hts}(hhhj(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')}(hjn'h]hconst}(hhhjAhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj=ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubj')}(hj*h]hstruct}(hhhj\hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj=ubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj|modnameN classnameNjajd)}jg]j c.get_timespec64asbuh1hhj=ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubh__user}(hhhj=hhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=ubh)}(hutsh]huts}(hhhjŨhhhNhNubah}(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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMghjhhubj)}(hhh]j6)}(h'get user's time value into kernel spaceh]h)get user’s time value into kernel space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hXI**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMchj ubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]j<)}(hj1h]hstruct timespec64 *ts}(hhhj3hhhNhNubah}(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.chM`hj+ubj)}(hhh]j6)}(h4destination :c:type:`struct timespec64 `h](h destination }(h destination hjJhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hjUh]hstruct timespec64}(hhhjWhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjSubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhjFhM`hjJubeh}(h]h ]h"]h$]h&]uh1j5hjFhM`hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM`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}(hhhjhhhNhNubah}(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]j6)}(hKuser's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>`h](huser’s time value as }(huser's time value as hjhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]j<)}(hjh]hstruct __kernel_timespec}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj__kernel_timespecuh1hhjhMahjubeh}(h]h ]h"]h$]h&]uh1j5hjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMchj ubj6)}(hHandles compat or 32-bit modes.h]hHandles compat or 32-bit modes.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMchj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMehj ubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj"ubh& on success or negative errno on error}(h& on success or negative errno on errorhj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMehj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_timespec64 (C function)c.put_timespec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\hhhjnhMubh)}(hput_timespec64h]h)}(hput_timespec64h]hput_timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjnhMubj)}(hC(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j$)}(hconst struct timespec64 *tsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjŪhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhj֪hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӪubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjتmodnameN classnameNjajd)}jg]jj)}j]jsbc.put_timespec64asbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htsh]hts}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h$struct __kernel_timespec __user *utsh](j')}(hj*h]hstruct}(hhhj*hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj&ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjJmodnameN classnameNjajd)}jg]jc.put_timespec64asbuh1hhj&ubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh__user}(hhhj&hhhNhNubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hutsh]huts}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj\hhhjnhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjnhMubah}(h]jSah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjUhhubj)}(hhh]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjnhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j֫j3j֫j4uh1hhhhj=fhNhNubjl)}(hX**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjޫubah}(h]h ]h"]h$]h&]uh1j5hT/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}(hhhjhhhNhNubah}(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]j6)}(h.input :c:type:`struct timespec64 `h](hinput }(hinput hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hj#h]hstruct timespec64}(hhhj%hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj!ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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<)}(hjXh]h$struct __kernel_timespec __user *uts}(hhhjZhhhNhNubah}(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]j6)}(h=user's :c:type:`struct __kernel_timespec <__kernel_timespec>`h](h user’s }(huser's hjqhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]j<)}(hj|h]hstruct __kernel_timespec}(hhhj~hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj__kernel_timespecuh1hhjmhMhjqubeh}(h]h ]h"]h$]h&]uh1j5hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(h]h ]h"]h$]h&]uh1jhjګubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjګubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhjͬhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjɬubh& on success or negative errno on error}(h& on success or negative errno on errorhjɬhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjګubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_old_timespec32 (C function)c.get_old_timespec32hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hget_old_timespec32h]h)}(hget_old_timespec32h]hget_old_timespec32}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h/(struct timespec64 *ts, const void __user *uts)h](j$)}(hstruct timespec64 *tsh](j')}(hj*h]hstruct}(hhhjDhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj@ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]j*sbc.get_old_timespec32asbuh1hhj@ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubh)}(htsh]hts}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj<ubj$)}(hconst void __user *utsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjíhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hvoidh]hvoid}(hhhjѭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj߭hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hutsh]huts}(hhhj 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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(h2get user's old-format time value into kernel spaceh]h4get user’s old-format time value into kernel space}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhj=fhNhNubjl)}(hXG**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](j6)}(h**Parameters**h]jv)}(hjYh]h Parameters}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjSubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]j<)}(hjxh]hstruct timespec64 *ts}(hhhjzhhhNhNubah}(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]j6)}(h4destination :c:type:`struct timespec64 `h](h destination }(h destination hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hjh]hstruct timespec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubj)}(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<)}(hjѮh]hconst void __user *uts}(hhhjӮ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]j6)}(hOuser's old-format time value (:c:type:`struct old_timespec32 `)h](h user’s old-format time value (}(huser's old-format time value (hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j<)}(hjh]hstruct old_timespec32}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjold_timespec32uh1hhjhMhjubh)}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˮubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubeh}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hj0h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjSubj6)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjSubj6)}(h **Return**h]jv)}(hjWh]hReturn}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjSubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubh& on success or negative errno on error}(h& on success or negative errno on errorhjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_old_timespec32 (C function)c.put_old_timespec32hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hput_old_timespec32h]h)}(hput_old_timespec32h]hput_old_timespec32}(hhhj̯hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȯubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h/(const struct timespec64 *ts, void __user *uts)h](j$)}(hconst struct timespec64 *tsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jj)}j]jίsbc.put_old_timespec32asbuh1hhjubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htsh]hts}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid __user *utsh](j)}(hvoidh]hvoid}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqubh__user}(hhhjqhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjqubh)}(hutsh]huts}(hhhjhhhNhNubah}(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 juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubj)}(hhh]j6)}(hmconvert timespec64 value to :c:type:`struct old_timespec32 ` and copy the latter to userspaceh](hconvert timespec64 value to }(hconvert timespec64 value to hj۰hhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j<)}(hjh]hstruct old_timespec32}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]j=c.put_old_timespec32asbjold_timespec32uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj۰ubh! and copy the latter to userspace}(h! and copy the latter to userspacehj۰hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjذhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj'h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hT/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<)}(hjFh]hconst struct timespec64 *ts}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj@ubj)}(hhh]j6)}(h.input :c:type:`struct timespec64 `h](hinput }(hinput hj_hhhNhNubh)}(h(:c:type:`struct timespec64 `h]j<)}(hjjh]hstruct timespec64}(hhhjlhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj timespec64uh1hhj[hMhj_ubeh}(h]h ]h"]h$]h&]uh1j5hj[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<)}(hjh]hvoid __user *uts}(hhhjhhhNhNubah}(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]j6)}(h7user's :c:type:`struct old_timespec32 `h](h user’s }(huser's hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j<)}(hjñh]hstruct old_timespec32}(hhhjűhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjold_timespec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj!ubj6)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj!ubj6)}(h **Return**h]jv)}(hj!h]hReturn}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj!ubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubh& on success or negative errno on error}(h& on success or negative errno on errorhj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_itimerspec64 (C function)c.get_itimerspec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqhhhjhMubh)}(hget_itimerspec64h]h)}(hget_itimerspec64h]hget_itimerspec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMubj)}(hG(struct itimerspec64 *it, const struct __kernel_itimerspec __user *uit)h](j$)}(hstruct itimerspec64 *ith](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hhhjвhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjͲubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjҲmodnameN classnameNjajd)}jg]jj)}j]jsbc.get_itimerspec64asbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hith]hit}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h,const struct __kernel_itimerspec __user *uith](j')}(hjn'h]hconst}(hhhj$hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj')}(hj*h]hstruct}(hhhj?hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(h__kernel_itimerspech]h__kernel_itimerspec}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj_modnameN classnameNjajd)}jg]jc.get_itimerspec64asbuh1hhj ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh__user}(hhhj hhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(huith]huit}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjjhhubj)}(hhh]j6)}(hWget user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` into kernel spaceh](h get user’s }(h get user's hjӳhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j<)}(hj޳h]hstruct __kernel_itimerspec}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjܳubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]jc.get_itimerspec64asbj__kernel_itimerspecuh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjӳubh into kernel space}(h into kernel spacehjӳhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjгhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hU``struct itimerspec64 *it`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *it``h]j<)}(hj>h]hstruct itimerspec64 *it}(hhhj@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.chMhj8ubj)}(hhh]j6)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(h destination hjWhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hjbh]hstruct itimerspec64}(hhhjdhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj`ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj itimerspec64uh1hhjShMhjWubeh}(h]h ]h"]h$]h&]uh1j5hjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(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<)}(hjh]h,const struct __kernel_itimerspec __user *uit}(hhhjhhhNhNubah}(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]j6)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(huser's hjhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j<)}(hjh]hstruct __kernel_itimerspec}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj__kernel_itimerspecuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh& on success or negative errno on error}(h& on success or negative errno on errorhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_itimerspec64 (C function)c.put_itimerspec64hNtauh1hhj=fhhhNhNubh)}(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}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBhhhjThMubh)}(hput_itimerspec64h]h)}(hput_itimerspec64h]hput_itimerspec64}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjThMubj)}(hG(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j$)}(hconst struct itimerspec64 *ith](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jisbc.put_itimerspec64asbuh1hhjubj9)}(h h]h }(hhhjܵhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hith]hit}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubj$)}(h&struct __kernel_itimerspec __user *uith](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(h__kernel_itimerspech]h__kernel_itimerspec}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jصc.put_itimerspec64asbuh1hhj ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh__user}(hhhj hhhNhNubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(huith]huit}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubeh}(h]h ]h"]h$]h&]jj uh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhjThMubah}(h]j9ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj;hhubj)}(hhh]j6)}(hsconvert :c:type:`struct itimerspec64 ` to __kernel_itimerspec format and copy the latter to userspaceh](hconvert }(hconvert hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hjh]hstruct itimerspec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]jصc.put_itimerspec64asbj itimerspec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubh? to __kernel_itimerspec format and copy the latter to userspace}(h? to __kernel_itimerspec format and copy the latter to userspacehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjѶhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjThMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/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}(hhhjhhhNhNubah}(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]j6)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hinput hj(hhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hj3h]hstruct itimerspec64}(hhhj5hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj itimerspec64uh1hhj$hMhj(ubeh}(h]h ]h"]h$]h&]uh1j5hj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(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<)}(hjhh]h&struct __kernel_itimerspec __user *uit}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjfubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjbubj)}(hhh]j6)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(huser's hjhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j<)}(hjh]hstruct __kernel_itimerspec}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj__kernel_itimerspecuh1hhj}hMhjubeh}(h]h ]h"]h$]h&]uh1j5hj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hj÷h]hReturn}(hhhjŷhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhjݷhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjٷubh& on success or negative errno on error}(h& on success or negative errno on errorhjٷhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!get_old_itimerspec32 (C function)c.get_old_itimerspec32hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj%hMubh)}(hget_old_itimerspec32h]h)}(hget_old_itimerspec32h]hget_old_itimerspec32}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hMubj)}(hF(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j$)}(hstruct itimerspec64 *itsh](j')}(hj*h]hstruct}(hhhjThhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjPubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjtmodnameN classnameNjajd)}jg]jj)}j]j:sbc.get_old_itimerspec32asbuh1hhjPubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hitsh]hits}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubj$)}(h*const struct old_itimerspec32 __user *uitsh](j')}(hjn'h]hconst}(hhhjƸhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj¸ubj9)}(h h]h }(hhhjӸhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¸ubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj¸ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¸ubh)}(hhh]h)}(hold_itimerspec32h]hold_itimerspec32}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.get_old_itimerspec32asbuh1hhj¸ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¸ubh__user}(hhhj¸hhhNhNubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj¸ubj~)}(hjh]h*}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj¸ubh)}(huitsh]huits}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj¸ubeh}(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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj hhubj)}(hhh]j6)}(hQget user's :c:type:`struct old_itimerspec32 ` into kernel spaceh](h get user’s }(h get user's hjuhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j<)}(hjh]hstruct old_itimerspec32}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj~ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]jc.get_old_itimerspec32asbjold_itimerspec32uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubh into kernel space}(h into kernel spacehjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjrhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjùhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hV``struct itimerspec64 *its`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *its``h]j<)}(hjh]hstruct itimerspec64 *its}(hhhjhhhNhNubah}(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]j6)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(h destination hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hjh]hstruct itimerspec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڹubeh}(h]h ]h"]h$]h&]uh1jhjhMhj׹ubj)}(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<)}(hj9h]h*const struct old_itimerspec32 __user *uits}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubj)}(hhh]j6)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(huser's hjRhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j<)}(hj]h]hstruct old_itimerspec32}(hhhj_hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjold_itimerspec32uh1hhjNhMhjRubeh}(h]h ]h"]h$]h&]uh1j5hjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj׹ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh& on success or negative errno on error}(h& on success or negative errno on errorhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!put_old_itimerspec32 (C function)c.put_old_itimerspec32hNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hput_old_itimerspec32h]h)}(hput_old_itimerspec32h]hput_old_itimerspec32}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hF(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j$)}(hconst struct itimerspec64 *itsh](j')}(hjn'h]hconst}(hhhj%hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj!ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj')}(hj*h]hstruct}(hhhj@hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj!ubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`modnameN classnameNjajd)}jg]jj)}j]j sbc.put_old_itimerspec32asbuh1hhj!ubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hitsh]hits}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h$struct old_itimerspec32 __user *uitsh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hold_itimerspec32h]hold_itimerspec32}(hhhjлhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjͻubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjһmodnameN classnameNjajd)}jg]jzc.put_old_itimerspec32asbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(huitsh]huits}(hhhjhhhNhNubah}(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&]juh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjݺhhubj)}(hhh]j6)}(hconvert :c:type:`struct itimerspec64 ` to :c:type:`struct old_itimerspec32 ` and copy the latter to userspaceh](hconvert }(hconvert hjFhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hjQh]hstruct itimerspec64}(hhhjShhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjd)}jg]jzc.put_old_itimerspec32asbj itimerspec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjFubh to }(h to hjFhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j<)}(hj{h]hstruct old_itimerspec32}(hhhj}hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjyubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjmjold_itimerspec32uh1hhjshMhjFubh! and copy the latter to userspace}(h! and copy the latter to userspacehjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjshMhjChhubah}(h]h ]h"]h$]h&]uh1jhjݺhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hV``const struct itimerspec64 *its`` input :c:type:`struct itimerspec64 ` h](j)}(h"``const struct itimerspec64 *its``h]j<)}(hjռh]hconst struct itimerspec64 *its}(hhhj׼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]j6)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hinput hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j<)}(hjh]hstruct itimerspec64}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjϼubeh}(h]h ]h"]h$]h&]uh1jhjhMhj̼ubj)}(he``struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h(``struct old_itimerspec32 __user *uits``h]j<)}(hj.h]h$struct old_itimerspec32 __user *uits}(hhhj0hhhNhNubah}(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]j6)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(huser's hjGhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j<)}(hjRh]hstruct old_itimerspec32}(hhhjThhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjold_itimerspec32uh1hhjChMhjGubeh}(h]h ]h"]h$]h&]uh1j5hjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj̼ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj6)}(h+``0`` on success or negative errno on errorh](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh& on success or negative errno on error}(h& on success or negative errno on errorhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__round_jiffies (C function)c.__round_jiffieshNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h8unsigned long __round_jiffies (unsigned long j, int cpu)h]h)}(h7unsigned long __round_jiffies(unsigned long j, int cpu)h](j)}(hunsignedh]hunsigned}(hhhjݽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٽhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjٽhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٽhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjٽhhhjhMubh)}(h__round_jiffiesh]h)}(h__round_jiffiesh]h__round_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjٽhhhjhMubj)}(h(unsigned long j, int cpu)h](j$)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2ubj)}(hlongh]hlong}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2ubh)}(hjh]hj}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj.ubj$)}(hint cpuh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhjhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjҽhhubj)}(hhh]j6)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjϾhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjʾhhubah}(h]h ]h"]h$]h&]uh1jhjҽhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hXb**Parameters** ``unsigned long j`` the time in (absolute) jiffies that should be rounded ``int cpu`` the processor number on which the timeout will happen **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 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#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<)}(hjGh]hint cpu}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjAubj)}(hhh]j6)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h__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.h]h__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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(h/The return value is the rounded version of the hjſhhhNhNubjv)}(h**j**h]hj}(hhhjοhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjſubh parameter.}(h parameter.hjſhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__round_jiffies_relative (C function)c.__round_jiffies_relativehNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj)}(hlongh]hlong}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h__round_jiffies_relativeh]h)}(h__round_jiffies_relativeh]h__round_jiffies_relative}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(unsigned long j, int cpu)h](j$)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]ubj)}(hlongh]hlong}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]ubh)}(hjh]hj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYubj$)}(hint cpuh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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<)}(hj9h]hunsigned long j}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj3ubj)}(hhh]j6)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]j<)}(hjrh]hint cpu}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjlubj)}(hhh]j6)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(h/The return value is the rounded version of the hjhhhNhNubjv)}(h**j**h]hj}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh parameter.}(h parameter.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌround_jiffies (C function)c.round_jiffieshNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h-unsigned long round_jiffies (unsigned long j)h]h)}(h,unsigned long round_jiffies(unsigned long j)h](j)}(hunsignedh]hunsigned}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/hhhjAhMubj)}(hlongh]hlong}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhMubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/hhhjAhMubh)}(h round_jiffiesh]h)}(h round_jiffiesh]h round_jiffies}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhjAhMubj)}(h(unsigned long j)h]j$)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjh]hj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj/hhhjAhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhjAhMubah}(h]j&ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj(hhubj)}(hhh]j6)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj)}(hhh]j)}(hJ``unsigned long j`` the time in (absolute) jiffies that should be rounded h](j)}(h``unsigned long j``h]j<)}(hj/h]hunsigned long j}(hhhj1hhhNhNubah}(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]j6)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjjh]h Description}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj6)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(h/The return value is the rounded version of the hjhhhNhNubjv)}(h**j**h]hj}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh parameter.}(h parameter.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#round_jiffies_relative (C function)c.round_jiffies_relativehNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h6unsigned long round_jiffies_relative (unsigned long j)h]h)}(h5unsigned long round_jiffies_relative(unsigned long j)h](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hround_jiffies_relativeh]h)}(hround_jiffies_relativeh]hround_jiffies_relative}(hhhjhhhNhNubah}(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}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubj)}(hlongh]hlong}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hjh]hj}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(h/The return value is the rounded version of the hjLhhhNhNubjv)}(h**j**h]hj}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh parameter.}(h parameter.hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__round_jiffies_up (C function)c.__round_jiffies_uphNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h;unsigned long __round_jiffies_up (unsigned long j, int cpu)h]h)}(h:unsigned long __round_jiffies_up(unsigned long j, int cpu)h](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h__round_jiffies_uph]h)}(h__round_jiffies_uph]h__round_jiffies_up}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjh]hj}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint cpuh](j)}(hinth]hint}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hcpuh]hcpu}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hX~**Parameters** ``unsigned long j`` the time in (absolute) jiffies that should be rounded ``int cpu`` the processor number on which the timeout will happen **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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]j<)}(hjh]hint cpu}(hhhjhhhNhNubah}(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]j6)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(__round_jiffies_up_relative (C function)c.__round_jiffies_up_relativehNtauh1hhj=fhhhNhNubh)}(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}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuhhhjhMubh)}(h__round_jiffies_up_relativeh]h)}(h__round_jiffies_up_relativeh]h__round_jiffies_up_relative}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjhMubj)}(h(unsigned long j, int cpu)h](j$)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjh]hj}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint cpuh](j)}(hinth]hint}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjuhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjhMubah}(h]jlah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjnhhubj)}(hhh]j6)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]j<)}(hjh]hint cpu}(hhhjhhhNhNubah}(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]j6)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌround_jiffies_up (C function)c.round_jiffies_uphNtauh1hhj=fhhhNhNubh)}(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}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM ubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_hhhjqhM ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_hhhjqhM ubh)}(hround_jiffies_uph]h)}(hround_jiffies_uph]hround_jiffies_up}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjqhM ubj)}(h(unsigned long j)h]j$)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjh]hj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXhhubj)}(hhh]j6)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j6j3j6j4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj:ubj)}(hhh]j)}(hJ``unsigned long j`` the time in (absolute) jiffies that should be rounded h](j)}(h``unsigned long j``h]j<)}(hj_h]hunsigned long j}(hhhjahhhNhNubah}(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 hjYubj)}(hhh]j6)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj:ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&round_jiffies_up_relative (C function)c.round_jiffies_up_relativehNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hround_jiffies_up_relativeh]h)}(hround_jiffies_up_relativeh]hround_jiffies_up_relative}(hhhjhhhNhNubah}(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}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubj)}(hlongh]hlong}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hjh]hj}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM!hjhhubj)}(hhh]j6)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinit_timer_key (C function)c.init_timer_keyhNtauh1hhj=fhhhNhNubh)}(hhh](h)}(hvoid init_timer_key (struct timer_list *timer, void (*func)(struct timer_list *), unsigned int flags, const char *name, struct lock_class_key *key)h]h)}(hvoid init_timer_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}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWhhhjihMubh)}(hinit_timer_keyh]h)}(hinit_timer_keyh]hinit_timer_key}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjihMubj)}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j~sbc.init_timer_keyasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void (*func)(struct timer_list*)h](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hfunch]hfunc}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj')}(hj*h]hstruct}(hhhjhhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.init_timer_keyasbuh1hhjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hnameh]hname}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct lock_class_key *keyh](j')}(hj*h]hstruct}(hhhjwhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjsubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubh)}(hhh]h)}(hlock_class_keyh]hlock_class_key}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.init_timer_keyasbuh1hhjsubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjsubh)}(hkeyh]hkey}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjWhhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjihMubah}(h]jNah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjPhhubj)}(hhh]j6)}(hinitialize a timerh]hinitialize a timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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** init_timer_key() must be done to a timer prior to calling *any* of the other timer functions.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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 initialized h](j)}(h``struct timer_list *timer``h]j<)}(hj:h]hstruct timer_list *timer}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubj)}(hhh]j6)}(hthe timer to be initializedh]hthe timer to be initialized}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h>``void (*func)(struct timer_list *)`` timer callback function h](j)}(h%``void (*func)(struct timer_list *)``h]j<)}(hjsh]h!void (*func)(struct timer_list *)}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjmubj)}(hhh]j6)}(htimer callback functionh]htimer callback function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h#``unsigned int flags`` timer flags h](j)}(h``unsigned int flags``h]j<)}(hjh]hunsigned int flags}(hhhjhhhNhNubah}(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]j6)}(h timer flagsh]h timer flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h'``const char *name`` name of the timer h](j)}(h``const char *name``h]j<)}(hjh]hconst char *name}(hhhjhhhNhNubah}(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]j6)}(hname of the timerh]hname of the timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(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<)}(hjh]hstruct lock_class_key *key}(hhhj 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]j6)}(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}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h]init_timer_key() must be done to a timer prior to calling *any* of the other timer functions.h](h:init_timer_key() must be done to a timer prior to calling }(h:init_timer_key() must be done to a timer prior to calling hjphhhNhNubj0)}(h*any*h]hany}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjpubh of the other timer functions.}(h of the other timer functions.hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmod_timer_pending (C function)c.mod_timer_pendinghNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hmod_timer_pendingh]h)}(hmod_timer_pendingh]hmod_timer_pending}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.mod_timer_pendingasbuh1hhjubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(h h]h }(hhhjphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubj)}(hlongh]hlong}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubh)}(hexpiresh]hexpires}(hhhjhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h Modify a pending timer's timeouth]h"Modify a pending timer’s timeout}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh](j)}(h>``struct timer_list *timer`` The pending timer to be modified h](j)}(h``struct timer_list *timer``h]j<)}(hjh]hstruct timer_list *timer}(hhhjhhhNhNubah}(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]j6)}(h The pending timer to be modifiedh]h The pending timer to be modified}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j<)}(hj?h]hunsigned long expires}(hhhjAhhhNhNubah}(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.chMhj9ubj)}(hhh]j6)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjzh]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hIf hjhhhNhNubjv)}(h**timer->function**h]htimer->function}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh8 == NULL then the start operation is silently discarded.}(h8 == NULL then the start operation is silently discarded.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh4 - The timer was inactive and not modified or was in}(h4 - The timer was inactive and not modified or was inhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j6)}(h.shutdown state and the operation was discardedh]h.shutdown state and the operation was discarded}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]uh1jnhjubjo)}(hB``1`` - The timer was active and requeued to expire at **expires**h]j6)}(hj2h](j<)}(h``1``h]h1}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubh2 - The timer was active and requeued to expire at }(h2 - The timer was active and requeued to expire at hj4hhhNhNubjv)}(h **expires**h]hexpires}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj0ubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajuh1j`hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmod_timer (C function) c.mod_timerhNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h mod_timerh]h)}(h mod_timerh]h mod_timer}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.mod_timerasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubj)}(hlongh]hlong}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hexpiresh]hexpires}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(hModify a timer's timeouth]hModify a timer’s timeout}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hXV**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: del_timer(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 del_timer() 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(hThe timer to be modifiedh]hThe timer to be modified}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j<)}(hjh]hunsigned long expires}(hhhjhhhNhNubah}(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]j6)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjRh]h Description}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h+mod_timer(timer, expires) is equivalent to:h]h+mod_timer(timer, expires) is equivalent to:}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjR)}(hhh]j6)}(h=del_timer(timer); timer->expires = expires; add_timer(timer);h]h=del_timer(timer); timer->expires = expires; add_timer(timer);}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjwubah}(h]h ]h"]h$]h&]uh1jQhjubj6)}(hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the del_timer() 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 del_timer() part is a NOP. The timer is in any case activated with the new expiry time }(hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the del_timer() part is a NOP. The timer is in any case activated with the new expiry time hjhhhNhNubjv)}(h **expires**h]hexpires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(hIf **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.h](hIf }(hIf hjhhhNhNubjv)}(h**timer->function**h]htimer->function}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhl == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.}(hl == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(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}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubh8 - The timer was inactive and started or was in shutdown}(h8 - The timer was inactive and started or was in shutdownhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j6)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj'ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(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}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj\ubh2 - The timer was active and requeued to expire at }(h2 - The timer was active and requeued to expire at hj\hhhNhNubjv)}(h **expires**h]hexpires}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh or}(h orhj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubj)}(hhh]j6)}(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 }(h.the timer was active and not modified because hjhhhNhNubjv)}(h **expires**h]hexpires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) did not change the effective expiry time}(h) did not change the effective expiry timehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajuh1j`hj&hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_reduce (C function)c.timer_reducehNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h timer_reduceh]h)}(h timer_reduceh]h timer_reduce}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(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}(hhhj-hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj)ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]jsbc.timer_reduceasbuh1hhj)ubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj%ubj$)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hexpiresh]hexpires}(hhhjhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h7Modify a timer's timeout if it would reduce the timeouth]h9Modify a timer’s timeout if it would reduce the timeout}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hU/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<)}(hjCh]hstruct timer_list *timer}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubj)}(hhh]j6)}(hThe timer to be modifiedh]hThe timer to be modified}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j<)}(hj|h]hunsigned long expires}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjvubj)}(hhh]j6)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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 }(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 hjhhhNhNubjv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% is not enqueued it starts the timer.}(h% is not enqueued it starts the timer.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hIf hjhhhNhNubjv)}(h**timer->function**h]htimer->function}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh8 == NULL then the start operation is silently discarded.}(h8 == NULL then the start operation is silently discarded.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(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}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubh8 - The timer was inactive and started or was in shutdown}(h8 - The timer was inactive and started or was in shutdownhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj5ubj)}(hhh]j6)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjWubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj2ubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jnhj+ubjo)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh2 - The timer was active and requeued to expire at }(h2 - The timer was active and requeued to expire at hjhhhNhNubjv)}(h **expires**h]hexpires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh or}(h orhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j6)}(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 }(h.the timer was active and not modified because hjhhhNhNubjv)}(h **expires**h]hexpires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhi did not change the effective expiry time such that the timer would expire earlier than already scheduled}(hi did not change the effective expiry time such that the timer would expire earlier than already scheduledhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/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&]uh1jnhj+ubeh}(h]h ]h"]h$]h&]jajuh1j`hjVhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer (C function) c.add_timerhNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h)void add_timer (struct timer_list *timer)h]h)}(h(void add_timer(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj/hMubh)}(h add_timerh]h)}(h add_timerh]h add_timer}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj/hMubj)}(h(struct timer_list *timer)h]j$)}(hstruct timer_list *timerh](j')}(hj*h]hstruct}(hhhj^hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjZubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]jj)}j]jDsb c.add_timerasbuh1hhjZubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjZubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubj)}(hhh]j6)}(h Start a timerh]h Start a timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(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}(hhhj%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]j6)}(hThe timer to be startedh]hThe timer to be started}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj^h]h Description}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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 }(hStart hjthhhNhNubjv)}(h **timer**h]htimer}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh to expire at }(h to expire at hjthhhNhNubjv)}(h**timer->expires**h]htimer->expires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh in the future. }(h in the future. hjthhhNhNubjv)}(h**timer->expires**h]htimer->expires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh is the absolute expiry time measured in ‘jiffies’. When the timer expires timer->function(timer) will be invoked from soft interrupt context.}(h is the absolute expiry time measured in 'jiffies'. When the timer expires timer->function(timer) will be invoked from soft interrupt context.hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(haThe **timer->expires** and **timer->function** fields must be set prior to calling this function.h](hThe }(hThe hjhhhNhNubjv)}(h**timer->expires**h]htimer->expires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and }(h and hjhhhNhNubjv)}(h**timer->function**h]htimer->function}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh3 fields must be set prior to calling this function.}(h3 fields must be set prior to calling this function.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hIf hjhhhNhNubjv)}(h**timer->function**h]htimer->function}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh8 == NULL then the start operation is silently discarded.}(h8 == NULL then the start operation is silently discarded.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(hgIf **timer->expires** is already in the past **timer** will be queued to expire at the next timer tick.h](hIf }(hIf hjhhhNhNubjv)}(h**timer->expires**h]htimer->expires}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is already in the past }(h is already in the past hjhhhNhNubjv)}(h **timer**h]htimer}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh1 will be queued to expire at the next timer tick.}(h1 will be queued to expire at the next timer tick.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_local (C function)c.add_timer_localhNtauh1hhj=fhhhNhNubh)}(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}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwhhhjhMubh)}(hadd_timer_localh]h)}(hadd_timer_localh]hadd_timer_local}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhMubj)}(h(struct timer_list *timer)h]j$)}(hstruct timer_list *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.add_timer_localasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjphhubj)}(hhh]j6)}(hStart a timer on the local CPUh]hStart a timer on the local CPU}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jTj3jTj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubj)}(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}(hhhjhhhNhNubah}(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.chMhjwubj)}(hhh]j6)}(hThe timer to be startedh]hThe timer to be started}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubj6)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_global (C function)c.add_timer_globalhNtauh1hhj=fhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM'ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM'ubh)}(hadd_timer_globalh]h)}(hadd_timer_globalh]hadd_timer_global}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM'ubj)}(h(struct timer_list *timer)h]j$)}(hstruct timer_list *timerh](j')}(hj*h]hstruct}(hhhjIhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjEubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjimodnameN classnameNjajd)}jg]jj)}j]j/sbc.add_timer_globalasbuh1hhjEubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjEubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM-hjhhubj)}(hhh]j6)}(h+Start a timer without TIMER_PINNED flag seth]h+Start a timer without TIMER_PINNED flag set}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM&hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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'hjubj)}(hhh]j6)}(hThe timer to be startedh]hThe timer to be started}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hM'hj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hM'hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjIh]h Description}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM)hjubj6)}(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.}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM)hjubj6)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_on (C function)c.add_timer_onhNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM8ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM8ubh)}(h add_timer_onh]h)}(h add_timer_onh]h add_timer_on}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM8ubj)}(h#(struct timer_list *timer, int cpu)h](j$)}(hstruct timer_list *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.add_timer_onasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint cpuh](j)}(hinth]hint}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hcpuh]hcpu}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM8ubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMBhjhhubj)}(hhh]j6)}(h!Start a timer on a particular CPUh]h!Start a timer on a particular CPU}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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.chM8hjubj)}(hhh]j6)}(hThe timer to be startedh]hThe timer to be started}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(h#``int cpu`` The CPU to start it on h](j)}(h ``int cpu``h]j<)}(hj h]hint cpu}(hhhjhhhNhNubah}(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.chM9hjubj)}(hhh]j6)}(hThe CPU to start it onh]hThe CPU to start it on}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hM9hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjHh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM;hjubj6)}(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`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM;hjubj6)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_delete (C function)c.timer_deletehNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h+int timer_delete (struct timer_list *timer)h]h)}(h*int timer_delete(struct timer_list *timer)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h timer_deleteh]h)}(h timer_deleteh]h timer_delete}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.timer_deleteasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhj2hhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(hDeactivate a timerh]hDeactivate a timer}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2juj3juj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj6)}(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 }(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 hjhhhNhNubjv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhS can be rearmed concurrently then the return value of this function is meaningless.}(hS can be rearmed concurrently then the return value of this function is meaningless.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj`)}(hhh](jo)}(h!``0`` - The timer was not pendingh]j6)}(hj/h](j<)}(h``0``h]h0}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubh - The timer was not pending}(h - The timer was not pendinghj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj-ubah}(h]h ]h"]h$]h&]uh1jnhj*ubjo)}(h-``1`` - The timer was pending and deactivatedh]j6)}(hjVh](j<)}(h``1``h]h1}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjXubh( - The timer was pending and deactivated}(h( - The timer was pending and deactivatedhjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjTubah}(h]h ]h"]h$]h&]uh1jnhj*ubeh}(h]h ]h"]h$]h&]jajuh1j`hjMhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_shutdown (C function)c.timer_shutdownhNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h-int timer_shutdown (struct timer_list *timer)h]h)}(h,int timer_shutdown(struct timer_list *timer)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(htimer_shutdownh]h)}(htimer_shutdownh]htimer_shutdown}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.timer_shutdownasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhj7hhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h'Deactivate a timer and prevent rearmingh]h'Deactivate a timer and prevent rearming}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj6)}(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 }(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 hjhhhNhNubjv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh6 after this function returns will be silently ignored.}(h6 after this function returns will be silently ignored.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj`)}(hhh](jo)}(h!``0`` - The timer was not pendingh]j6)}(hjCh](j<)}(h``0``h]h0}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubh - The timer was not pending}(h - The timer was not pendinghjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjAubah}(h]h ]h"]h$]h&]uh1jnhj>ubjo)}(h``1`` - The timer was pendingh]j6)}(hjjh](j<)}(h``1``h]h1}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubh - The timer was pending}(h - The timer was pendinghjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhubah}(h]h ]h"]h$]h&]uh1jnhj>ubeh}(h]h ]h"]h$]h&]jajuh1j`hjahMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"try_to_del_timer_sync (C function)c.try_to_del_timer_synchNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h4int try_to_del_timer_sync (struct timer_list *timer)h]h)}(h3int try_to_del_timer_sync(struct timer_list *timer)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(htry_to_del_timer_synch]h)}(htry_to_del_timer_synch]htry_to_del_timer_sync}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.try_to_del_timer_syncasbuh1hhjubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjKhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(hTry to deactivate a timerh]hTry to deactivate a timer}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(hTimer to deactivateh]hTimer to deactivate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(h"``0`` - The timer was not pendingh]j6)}(hjCh](j<)}(h``0``h]h0}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubh - The timer was not pending}(h - The timer was not pendinghjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjAubah}(h]h ]h"]h$]h&]uh1jnhj>ubjo)}(h.``1`` - The timer was pending and deactivatedh]j6)}(hjjh](j<)}(h``1``h]h1}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubh) - The timer was pending and deactivated}(h) - The timer was pending and deactivatedhjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhubah}(h]h ]h"]h$]h&]uh1jnhj>ubjo)}(hB``-1`` - The timer callback function is running on a different CPUh]j6)}(hjh](j<)}(h``-1``h]h-1}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh< - The timer callback function is running on a different CPU}(h< - The timer callback function is running on a different CPUhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhj>ubeh}(h]h ]h"]h$]h&]jajuh1j`hjahMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_delete_sync (C function)c.timer_delete_synchNtauh1hhj=fhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(htimer_delete_synch]h)}(htimer_delete_synch]htimer_delete_sync}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj9modnameN classnameNjajd)}jg]jj)}j]jsbc.timer_delete_syncasbuh1hhjubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjrhhhNhNubah}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h6Deactivate a timer and wait for the handler to finish.h]h6Deactivate a timer and wait for the handler to finish.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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}(hhhjhhhNhNubah}(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]j6)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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:}(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:hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(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);}(hhhjNubah}(h]h ]h"]h$]h&]jj uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(h!``0`` - The timer was not pendingh]j6)}(hjh](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh - The timer was not pending}(h - The timer was not pendinghjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(h-``1`` - The timer was pending and deactivatedh]j6)}(hjh](j<)}(h``1``h]h1}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh( - The timer was pending and deactivated}(h( - The timer was pending and deactivatedhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajuh1j`hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ timer_shutdown_sync (C function)c.timer_shutdown_synchNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h2int timer_shutdown_sync (struct timer_list *timer)h]h)}(h1int timer_shutdown_sync(struct timer_list *timer)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj'hMubh)}(htimer_shutdown_synch]h)}(htimer_shutdown_synch]htimer_shutdown_sync}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hMubj)}(h(struct timer_list *timer)h]j$)}(hstruct timer_list *timerh](j')}(hj*h]hstruct}(hhhjVhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjRubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjvmodnameN classnameNjajd)}jg]jj)}j]j<sbc.timer_shutdown_syncasbuh1hhjRubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjNubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj'hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubj)}(hhh]j6)}(h%Shutdown a timer and prevent rearmingh]h%Shutdown a timer and prevent rearming}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/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&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/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<)}(hjh]hstruct timer_list *timer}(hhhjhhhNhNubah}(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]j6)}(hThe timer to be shutdownh]hThe timer to be shutdown}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjVh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hU/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:}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjoubj)}(hhh]j`)}(hhh](jo)}(h**timer** is not queuedh]j6)}(hjh](jv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not queued}(h is not queuedhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(h1The callback function of **timer** is not runningh]j6)}(hjh](hThe callback function of }(hThe callback function of hjhhhNhNubjv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not running}(h is not runninghjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(hX**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h]j6)}(hW**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored.h](jv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh0 cannot be enqueued again. Any attempt to rearm }(h0 cannot be enqueued again. Any attempt to rearm hjhhhNhNubjv)}(h **timer**h]htimer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is silently ignored.}(h is silently ignored.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajauh1j`hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h2See timer_delete_sync() for synchronization rules.h]h2See timer_delete_sync() for synchronization rules.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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().}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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:}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjR)}(hhh]j6)}(hstimer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `);h](htimer_shutdown_sync(}(htimer_shutdown_sync(hjmhhhNhNubh)}(h":c:type:`mything->timer `h]j<)}(hjxh]hmything->timer}(hhhjzhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjvubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjmythinguh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjmubh); workqueue_destroy(}(h); workqueue_destroy(hjmhhhNhNubh)}(h&:c:type:`mything->workqueue `h]j<)}(hjh]hmything->workqueue}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjjmythinguh1hhjhMhjmubh);}(h);hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjjubah}(h]h ]h"]h$]h&]uh1jQhjubj6)}(h)After this 'mything' can be safely freed.h]h-After this ‘mything’ can be safely freed.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj`)}(hhh](jo)}(h!``0`` - The timer was not pendingh]j6)}(hjh](j<)}(h``0``h]h0}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh - The timer was not pending}(h - The timer was not pendinghjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(h``1`` - The timer was pendingh]j6)}(hj-h](j<)}(h``1``h]h1}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubh - The timer was pending}(h - The timer was pendinghj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajuh1j`hj$hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌschedule_timeout (C function)c.schedule_timeouthNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h2signed long schedule_timeout (signed long timeout)h]h)}(h1signed long schedule_timeout(signed long timeout)h](j)}(hsignedh]hsigned}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjhM ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjhM ubh)}(hschedule_timeouth]h)}(hschedule_timeouth]hschedule_timeout}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhM ubj)}(h(signed long timeout)h]j$)}(hsigned long timeouth](j)}(hsignedh]hsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(htimeouth]htimeout}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjthhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhM ubah}(h]jkah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjmhhubj)}(hhh]j6)}(hsleep until timeouth]hsleep until timeout}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj1hhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLj3jLj4uh1hhhhj=fhNhNubjl)}(hX**Parameters** ``signed long timeout`` timeout value in jiffies **Description** Make the current task sleep until **timeout** jiffies have elapsed. The function behavior depends on the current task state (see also set_current_state() description): ``TASK_RUNNING`` - the scheduler is called, but the task does not sleep at all. That happens because sched_submit_work() does nothing for tasks in ``TASK_RUNNING`` state. ``TASK_UNINTERRUPTIBLE`` - at least **timeout** jiffies are guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()). ``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up. The current task state is guaranteed to be ``TASK_RUNNING`` when this routine returns. Specifying a **timeout** value of ``MAX_SCHEDULE_TIMEOUT`` will schedule the CPU away without a bound on the timeout. In this case the return value will be ``MAX_SCHEDULE_TIMEOUT``. Returns 0 when the timer has expired otherwise the remaining time in jiffies will be returned. In all cases the return value is guaranteed to be non-negative.h](j6)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj)}(hhh]j)}(h1``signed long timeout`` timeout value in jiffies h](j)}(h``signed long timeout``h]j<)}(hjuh]hsigned long timeout}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjoubj)}(hhh]j6)}(htimeout value in jiffiesh]htimeout value in jiffies}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM hjlubah}(h]h ]h"]h$]h&]uh1jhjPubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(hMake the current task sleep until **timeout** jiffies have elapsed. The function behavior depends on the current task state (see also set_current_state() description):h](h"Make the current task sleep until }(h"Make the current task sleep until hjhhhNhNubjv)}(h **timeout**h]htimeout}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhz jiffies have elapsed. The function behavior depends on the current task state (see also set_current_state() description):}(hz jiffies have elapsed. The function behavior depends on the current task state (see also set_current_state() description):hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(h``TASK_RUNNING`` - the scheduler is called, but the task does not sleep at all. That happens because sched_submit_work() does nothing for tasks in ``TASK_RUNNING`` state.h](j<)}(h``TASK_RUNNING``h]h TASK_RUNNING}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh - the scheduler is called, but the task does not sleep at all. That happens because sched_submit_work() does nothing for tasks in }(h - the scheduler is called, but the task does not sleep at all. That happens because sched_submit_work() does nothing for tasks in hjhhhNhNubj<)}(h``TASK_RUNNING``h]h TASK_RUNNING}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh state.}(h state.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(h``TASK_UNINTERRUPTIBLE`` - at least **timeout** jiffies are guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).h](j<)}(h``TASK_UNINTERRUPTIBLE``h]hTASK_UNINTERRUPTIBLE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh - at least }(h - at least hjhhhNhNubjv)}(h **timeout**h]htimeout}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh jiffies are guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).}(h jiffies are guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(h``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.h](j<)}(h``TASK_INTERRUPTIBLE``h]hTASK_INTERRUPTIBLE}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKubhx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.}(hx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(hVThe current task state is guaranteed to be ``TASK_RUNNING`` when this routine returns.h](h+The current task state is guaranteed to be }(h+The current task state is guaranteed to be hjihhhNhNubj<)}(h``TASK_RUNNING``h]h TASK_RUNNING}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubh when this routine returns.}(h when this routine returns.hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(hSpecifying a **timeout** value of ``MAX_SCHEDULE_TIMEOUT`` will schedule the CPU away without a bound on the timeout. In this case the return value will be ``MAX_SCHEDULE_TIMEOUT``.h](h Specifying a }(h Specifying a hjhhhNhNubjv)}(h **timeout**h]htimeout}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh value of }(h value of hjhhhNhNubj<)}(h``MAX_SCHEDULE_TIMEOUT``h]hMAX_SCHEDULE_TIMEOUT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhb will schedule the CPU away without a bound on the timeout. In this case the return value will be }(hb will schedule the CPU away without a bound on the timeout. In this case the return value will be hjhhhNhNubj<)}(h``MAX_SCHEDULE_TIMEOUT``h]hMAX_SCHEDULE_TIMEOUT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubj6)}(hReturns 0 when the timer has expired otherwise the remaining time in jiffies will be returned. In all cases the return value is guaranteed to be non-negative.h]hReturns 0 when the timer has expired otherwise the remaining time in jiffies will be returned. In all cases the return value is guaranteed to be non-negative.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmsleep (C function)c.msleephNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h void msleep (unsigned int msecs)h]h)}(hvoid msleep(unsigned int msecs)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hmsleeph]h)}(hmsleeph]hmsleep}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h(unsigned int msecs)h]j$)}(hunsigned int msecsh](j)}(hunsignedh]hunsigned}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<ubj)}(hinth]hint}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<ubh)}(hmsecsh]hmsecs}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj8ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubj)}(hhh]j6)}(h.sleep safely even with waitqueue interruptionsh]h.sleep safely even with waitqueue interruptions}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hJ**Parameters** ``unsigned int msecs`` Time in milliseconds to sleep forh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj)}(hhh]j)}(h8``unsigned int msecs`` Time in milliseconds to sleep forh](j)}(h``unsigned int msecs``h]j<)}(hjh]hunsigned int msecs}(hhhjhhhNhNubah}(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]j6)}(h!Time in milliseconds to sleep forh]h!Time in milliseconds to sleep for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!msleep_interruptible (C function)c.msleep_interruptiblehNtauh1hhj=fhhhNhNubh)}(hhh](h)}(h7unsigned long msleep_interruptible (unsigned int msecs)h]h)}(h6unsigned long msleep_interruptible(unsigned int msecs)h](j)}(hunsignedh]hunsigned}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM ubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:hhhjLhM ubj)}(hlongh]hlong}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhM ubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:hhhjLhM ubh)}(hmsleep_interruptibleh]h)}(hmsleep_interruptibleh]hmsleep_interruptible}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhjLhM ubj)}(h(unsigned int msecs)h]j$)}(hunsigned int msecsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmsecsh]hmsecs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj:hhhjLhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhjLhM ubah}(h]j1ah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj3hhubj)}(hhh]j6)}(hsleep waiting for signalsh]hsleep waiting for signals}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hJ**Parameters** ``unsigned int msecs`` Time in milliseconds to sleep forh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj)}(hhh]j)}(h8``unsigned int msecs`` Time in milliseconds to sleep forh](j)}(h``unsigned int msecs``h]j<)}(hj;h]hunsigned int msecs}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj5ubj)}(hhh]j6)}(h!Time in milliseconds to sleep forh]h!Time in milliseconds to sleep for}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌusleep_range_state (C function)c.usleep_range_statehNtauh1hhj=fhhhNhNubh)}(hhh](h)}(hRvoid usleep_range_state (unsigned long min, unsigned long max, unsigned int state)h]h)}(hQvoid usleep_range_state(unsigned long min, unsigned long max, unsigned int state)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(husleep_range_stateh]h)}(husleep_range_stateh]husleep_range_state}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h:(unsigned long min, unsigned long max, unsigned int state)h](j$)}(hunsigned long minh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hminh]hmin}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned long maxh](j)}(hunsignedh]hunsigned}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmaxh]hmax}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int stateh](j)}(hunsignedh]hunsigned}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjpubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjpubh)}(hstateh]hstate}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(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&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubj)}(hhh]j6)}(h.Sleep for an approximate time in a given stateh]h.Sleep for an approximate time in a given state}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj=fhNhNubjl)}(hXD**Parameters** ``unsigned long min`` Minimum time in usecs to sleep ``unsigned long max`` Maximum time in usecs to sleep ``unsigned int state`` State of the current task that will be while sleeping **Description** In non-atomic context where the exact wakeup time is flexible, use usleep_range_state() instead of udelay(). The sleep improves responsiveness by avoiding the CPU-hogging busy-wait of udelay(), and the range reduces power usage by allowing hrtimers to take advantage of an already- scheduled interrupt instead of scheduling a new one just for this sleep.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj)}(hhh](j)}(h5``unsigned long min`` Minimum time in usecs to sleep h](j)}(h``unsigned long min``h]j<)}(hjh]hunsigned long min}(hhhjhhhNhNubah}(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]j6)}(hMinimum time in usecs to sleeph]hMinimum time in usecs to sleep}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hM hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM hjubj)}(h5``unsigned long max`` Maximum time in usecs to sleep h](j)}(h``unsigned long max``h]j<)}(hjQh]hunsigned long max}(hhhjShhhNhNubah}(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.chM hjKubj)}(hhh]j6)}(hMaximum time in usecs to sleeph]hMaximum time in usecs to sleep}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjubj)}(hM``unsigned int state`` State of the current task that will be while sleeping h](j)}(h``unsigned int state``h]j<)}(hjh]hunsigned int state}(hhhjhhhNhNubah}(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]j6)}(h5State of the current task that will be while sleepingh]h5State of the current task that will be while sleeping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj6)}(hXcIn non-atomic context where the exact wakeup time is flexible, use usleep_range_state() instead of udelay(). The sleep improves responsiveness by avoiding the CPU-hogging busy-wait of udelay(), and the range reduces power usage by allowing hrtimers to take advantage of an already- scheduled interrupt instead of scheduling a new one just for this sleep.h]hXcIn non-atomic context where the exact wakeup time is flexible, use usleep_range_state() instead of udelay(). The sleep improves responsiveness by avoiding the CPU-hogging busy-wait of udelay(), and the range reduces power usage by allowing hrtimers to take advantage of an already- scheduled interrupt instead of scheduling a new one just for this sleep.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj=fhhhNhNubeh}(h]time-and-timer-routinesah ]h"]time and timer routinesah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(hHigh-resolution timersh]hHigh-resolution timers}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK1ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_set (C function) c.ktime_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h=ktime_t ktime_set (const s64 secs, const unsigned long nsecs)h]h)}(h cmp2: return >0h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(h comparable1h]h comparable1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKUhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j<)}(hjh]hconst ktime_t cmp2}(hhhjhhhNhNubah}(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.hhKVhjubj)}(hhh]j6)}(h comparable2h]h comparable2}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubj)}(hhh]j)}(hJ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h](j)}(h...h]h...}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKZhj5ubj)}(hhh]j6)}(hFcmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h]hFcmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKYhjHubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjGhKZhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_after (C function) c.ktime_afterhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKhubh)}(h ktime_afterh]h)}(h ktime_afterh]h ktime_after}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKhubj)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j$)}(hconst ktime_t cmp1h](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hktime_th]hktime_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.ktime_afterasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcmp1h]hcmp1}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst ktime_t cmp2h](j')}(hjn'h]hconst}(hhhj-hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj)ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hhh]h)}(hktime_th]hktime_t}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]j c.ktime_afterasbuh1hhj)ubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hcmp2h]hcmp2}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKhubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKhubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKmhjhhubj)}(hhh]j6)}(h6Compare if a ktime_t value is bigger than another one.h]h6Compare if a ktime_t value is bigger than another one.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKghjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKhubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened after cmp2.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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<)}(hjh]hconst ktime_t cmp1}(hhhjhhhNhNubah}(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.hhKhhjubj)}(hhh]j6)}(h comparable1h]h comparable1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j<)}(hjh]hconst ktime_t cmp2}(hhhjhhhNhNubah}(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.hhKihjubj)}(hhh]j6)}(h comparable2h]h comparable2}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hKihj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKihjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjWh]hReturn}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubj6)}(h!true if cmp1 happened after cmp2.h]h!true if cmp1 happened after cmp2.}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_before (C function)c.ktime_beforehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKtubh)}(h ktime_beforeh]h)}(h ktime_beforeh]h ktime_before}(hhhjhhhNhNubah}(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')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hktime_th]hktime_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.ktime_beforeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcmp1h]hcmp1}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst ktime_t cmp2h](j')}(hjn'h]hconst}(hhhj=hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj9ubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubh)}(hhh]h)}(hktime_th]hktime_t}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]jc.ktime_beforeasbuh1hhj9ubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubh)}(hcmp2h]hcmp2}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKyhjhhubj)}(hhh]j6)}(h7Compare if a ktime_t value is smaller than another one.h]h7Compare if a ktime_t value is smaller than another one.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKtubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened before cmp2.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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<)}(hjh]hconst ktime_t cmp1}(hhhjhhhNhNubah}(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.hhKthjubj)}(hhh]j6)}(h comparable1h]h comparable1}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKthj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j<)}(hj,h]hconst ktime_t cmp2}(hhhj.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.hhKuhj&ubj)}(hhh]j6)}(h comparable2h]h comparable2}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhKuhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKuhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjgh]hReturn}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubj6)}(h"true if cmp1 happened before cmp2.h]h"true if cmp1 happened before cmp2.}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%ktime_to_timespec64_cond (C function)c.ktime_to_timespec64_condhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hktime_to_timespec64_condh]h)}(hktime_to_timespec64_condh]hktime_to_timespec64_cond}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h)(const ktime_t kt, struct timespec64 *ts)h](j$)}(hconst ktime_t kth](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hktime_th]hktime_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.ktime_to_timespec64_condasbuh1hhjubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hkth]hkt}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct timespec64 *tsh](j')}(hj*h]hstruct}(hhhjMhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjIubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmmodnameN classnameNjajd)}jg]j"c.ktime_to_timespec64_condasbuh1hhjIubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubh)}(htsh]hts}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjhhubj)}(hhh]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj)}(hhh](j)}(h5``const ktime_t kt`` the ktime_t variable to convert h](j)}(h``const ktime_t kt``h]j<)}(hjh]hconst ktime_t kt}(hhhjhhhNhNubah}(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.hhKhj ubj)}(hhh]j6)}(hthe ktime_t variable to converth]hthe ktime_t variable to convert}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(hG``struct timespec64 *ts`` the timespec variable to store the result in h](j)}(h``struct timespec64 *ts``h]j<)}(hjIh]hstruct timespec64 *ts}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjCubj)}(hhh]j6)}(h,the timespec variable to store the result inh]h,the timespec variable to store the result in}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj6)}(hE``true`` if there was a successful conversion, ``false`` if kt was 0.h](j<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh' if there was a successful conversion, }(h' if there was a successful conversion, hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if kt was 0.}(h if kt was 0.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_sleeper (C struct)c.hrtimer_sleeperhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhrtimer_sleeperh]h)}(hstruct hrtimer_sleeperh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKWubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKWubh)}(hhrtimer_sleeperh]h)}(hjh]hhrtimer_sleeper}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKWubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKWubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjhhubj)}(hhh]j6)}(hsimple sleeper structureh]hsimple sleeper structure}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKVhj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKWubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jFj3jFj4uh1hhhhjhNhNubjl)}(h**Definition**:: struct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; }; **Members** ``timer`` embedded timer structure ``task`` task to wake uph](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh:}(hjhjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKZhjJubj)}(hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };h]hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };}(hhhjkubah}(h]h ]h"]h$]h&]jj uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhK\hjJubj6)}(h **Members**h]jv)}(hj|h]hMembers}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKahjJubj)}(hhh](j)}(h#``timer`` embedded timer structure h](j)}(h ``timer``h]j<)}(hjh]htimer}(hhhjhhhNhNubah}(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]j6)}(hembedded timer structureh]hembedded timer structure}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKXhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(htask to wake uph]htask to wake up}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhK\hjhhubj6)}(h,task is set to NULL, when the timer expires.h]h,task is set to NULL, when the timer expires.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKZhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_start (C function)c.hrtimer_starthNtauh1hhjhhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQhhhjchM ubh)}(h hrtimer_starth]h)}(h hrtimer_starth]h hrtimer_start}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjchM ubj)}(hB(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jxsbc.hrtimer_startasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jc.hrtimer_startasbuh1hhjubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(htimh]htim}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst enum hrtimer_mode modeh](j')}(hjn'h]hconst}(hhhjLhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjHubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubj')}(henumh]henum}(hhhjghhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjHubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.hrtimer_startasbuh1hhjHubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hmodeh]hmode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhjchM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjchM ubah}(h]jHah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjJhhubj)}(hhh]j6)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]j<)}(hjh]hstruct hrtimer *timer}(hhhj hhhNhNubah}(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]j6)}(hthe timer to be addedh]hthe timer to be added}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]j<)}(hjWh]h ktime_t tim}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjQubj)}(hhh]j6)}(h expiry timeh]h expiry time}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(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!}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"hrtimer_get_remaining (C function)c.hrtimer_get_remaininghNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]hrtimer_get_remainingsbc.hrtimer_get_remainingasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM1ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM1ubh)}(hhrtimer_get_remainingh]h)}(hj h]hhrtimer_get_remaining}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM1ubj)}(h(const struct hrtimer *timer)h]j$)}(hconst struct hrtimer *timerh](j')}(hjn'h]hconst}(hhhj<hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj8ubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubj')}(hj*h]hstruct}(hhhjWhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj8ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjwmodnameN classnameNjajd)}jg]j c.hrtimer_get_remainingasbuh1hhj8ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj8ubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM3hjhhubj)}(hhh]j6)}(h get remaining time for the timerh]h get remaining time for the timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM0hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(hC**Parameters** ``const struct hrtimer *timer`` the timer to readh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM4hjubj)}(hhh]j)}(h1``const struct hrtimer *timer`` the timer to readh](j)}(h``const struct hrtimer *timer``h]j<)}(hjh]hconst struct hrtimer *timer}(hhhjhhhNhNubah}(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.hhM6hjubj)}(hhh]j6)}(hthe timer to readh]hthe timer to read}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM1hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_is_queued (C function)c.hrtimer_is_queuedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool hrtimer_is_queued (struct hrtimer *timer)h]h)}(h-bool hrtimer_is_queued(struct hrtimer *timer)h](j)}(hjh]hbool}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM?ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjphhhjhM?ubh)}(hhrtimer_is_queuedh]h)}(hhrtimer_is_queuedh]hhrtimer_is_queued}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhM?ubj)}(h(struct hrtimer *timer)h]j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.hrtimer_is_queuedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjphhhjhM?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhM?ubah}(h]jgah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMEhjihhubj)}(hhh]j6)}(h0check, whether the timer is on one of the queuesh]h0check, whether the timer is on one of the queues}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM>hj1hhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhM?ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLj3jLj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMBhjPubj)}(hhh]j)}(h)``struct hrtimer *timer`` Timer to check h](j)}(h``struct hrtimer *timer``h]j<)}(hjuh]hstruct hrtimer *timer}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM?hjoubj)}(hhh]j6)}(hTimer to checkh]hTimer to check}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjlubah}(h]h ]h"]h$]h&]uh1jhjPubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMAhjPubj6)}(h,True if the timer is queued, false otherwiseh]h,True if the timer is queued, false otherwise}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMAhjPubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMChjPubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMChjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ hrtimer_forward_now (C function)c.hrtimer_forward_nowhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]hrtimer_forward_nowsbc.hrtimer_forward_nowasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMZubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj@hMZubh)}(hhrtimer_forward_nowh]h)}(hj=h]hhrtimer_forward_now}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj@hMZubj)}(h)(struct hrtimer *timer, ktime_t interval)h](j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhjnhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjjubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j;c.hrtimer_forward_nowasbuh1hhjjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjfubj$)}(hktime_t intervalh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j;c.hrtimer_forward_nowasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hintervalh]hinterval}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjfubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj@hMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj@hMZubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM`hjhhubj)}(hhh]j6)}(h0forward the timer expiry so it expires after nowh]h0forward the timer expiry so it expires after now}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMYhj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj@hMZubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM]hjTubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]j<)}(hjyh]hstruct hrtimer *timer}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMZhjsubj)}(hhh]j6)}(hhrtimer to forwardh]hhrtimer to forward}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjpubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]j<)}(hjh]hktime_t interval}(hhhjhhhNhNubah}(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]j6)}(hthe interval to forwardh]hthe interval to forward}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM]hjTubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM]hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_forward (C function)c.hrtimer_forwardhNtauh1hhjhhhNhNubh)}(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}(hhhj5 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2 ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7 modnameN classnameNjajd)}jg]jj)}j]hrtimer_forwardsbc.hrtimer_forwardasbuh1hhj. hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjW hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj. hhhjV hMubh)}(hhrtimer_forwardh]h)}(hjS h]hhrtimer_forward}(hhhji hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj. hhhjV hMubj)}(h6(struct hrtimer *timer, ktime_t now, ktime_t interval)h](j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jQ c.hrtimer_forwardasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(htimerh]htimer}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj| ubj$)}(h ktime_t nowh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jQ c.hrtimer_forwardasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hnowh]hnow}(hhhj# hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj| ubj$)}(hktime_t intervalh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj? hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj< ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjA modnameN classnameNjajd)}jg]jQ c.hrtimer_forwardasbuh1hhj8 ubj9)}(h h]h }(hhhj] hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8 ubh)}(hintervalh]hinterval}(hhhjk hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8 ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj| ubeh}(h]h ]h"]h$]h&]jj uh1jhj. hhhjV hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj* hhhjV hMubah}(h]j% ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj' hhubj)}(hhh]j6)}(hforward the timer expiryh]hforward the timer expiry}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj' hhhjV hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]j<)}(hj h]hstruct hrtimer *timer}(hhhj 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]j6)}(hhrtimer to forwardh]hhrtimer to forward}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h'``ktime_t now`` forward past this time h](j)}(h``ktime_t now``h]j<)}(hj h]h ktime_t now}(hhhj 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]j6)}(hforward past this timeh]hforward past this time}(hj+ hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj% hMhj& ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj% hMhj ubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]j<)}(hjI h]hktime_t interval}(hhhjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjG ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjC ubj)}(hhh]j6)}(hthe interval to forwardh]hthe interval to forward}(hjd hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^ hMhj_ ubah}(h]h ]h"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]uh1jhj^ hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj6)}(h9Forward the timer expiry so it will expire in the future.h]h9Forward the timer expiry so it will expire in the future.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubhnote)}(hHThis only updates the timer expiry value and does not requeue the timer.h]j6)}(hj h]hHThis only updates the timer expiry value and does not requeue the timer.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj6)}(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().}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj6)}(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 }(h3Can be safely called from the callback function of hj hhhNhNubjv)}(h **timer**h]htimer}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh . If called from other contexts }(h . If called from other contexts hj hhhNhNubjv)}(h **timer**h]htimer}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubhf must neither be enqueued nor running the callback and the caller needs to take care of serialization.}(hf must neither be enqueued nor running the callback and the caller needs to take care of serialization.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj6)}(h **Return**h]jv)}(hj" h]hReturn}(hhhj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hj ubj6)}(h$The number of overruns are returned.h]h$The number of overruns are returned.}(hj: hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#hrtimer_start_range_ns (C function)c.hrtimer_start_range_nshNtauh1hhjhhhNhNubh)}(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}(hhhjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjv hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjc hhhju hMubh)}(hhrtimer_start_range_nsh]h)}(hhrtimer_start_range_nsh]hhrtimer_start_range_ns}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjc hhhju hMubj)}(hP(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sbc.hrtimer_start_range_nsasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(htimerh]htimer}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h ktime_t timh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]j c.hrtimer_start_range_nsasbuh1hhj ubj9)}(h h]h }(hhhj7 hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(htimh]htim}(hhhjE hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h u64 delta_nsh](h)}(hhh]h)}(hu64h]hu64}(hhhja hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjc modnameN classnameNjajd)}jg]j c.hrtimer_start_range_nsasbuh1hhjZ ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZ ubh)}(hdelta_nsh]hdelta_ns}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hconst enum hrtimer_mode modeh](j')}(hjn'h]hconst}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj')}(hjih]henum}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]j c.hrtimer_start_range_nsasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hmodeh]hmode}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjc hhhju hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_ hhhju hMubah}(h]jZ ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj\ hhubj)}(hhh]j6)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhj\ hhhju hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjRubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]j<)}(hjwh]hstruct hrtimer *timer}(hhhjyhhhNhNubah}(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]j6)}(hthe timer to be addedh]hthe timer to be added}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]j<)}(hjh]h ktime_t tim}(hhhjhhhNhNubah}(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]j6)}(h expiry timeh]h expiry time}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h-``u64 delta_ns`` "slack" range for the timer h](j)}(h``u64 delta_ns``h]j<)}(hjh]h u64 delta_ns}(hhhjhhhNhNubah}(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]j6)}(h"slack" range for the timerh]h“slack” range for the timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(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}(hhhj$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.chMhjubj)}(hhh]j6)}(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=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"hrtimer_try_to_cancel (C function)c.hrtimer_try_to_cancelhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int hrtimer_try_to_cancel (struct hrtimer *timer)h]h)}(h0int hrtimer_try_to_cancel(struct hrtimer *timer)h](j)}(hinth]hint}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjhMubh)}(hhrtimer_try_to_cancelh]h)}(hhrtimer_try_to_cancelh]hhrtimer_try_to_cancel}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhMubj)}(h(struct hrtimer *timer)h]j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.hrtimer_try_to_cancelasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM&hjqhhubj)}(hhh]j6)}(htry to deactivate a timerh]htry to deactivate a timer}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUj3jUj4uh1hhhhjhNhNubjl)}(h**Parameters** ``struct hrtimer *timer`` hrtimer to stop **Return** * 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](j6)}(h**Parameters**h]jv)}(hj_h]h Parameters}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjYubj)}(hhh]j)}(h*``struct hrtimer *timer`` hrtimer to stop h](j)}(h``struct hrtimer *timer``h]j<)}(hj~h]hstruct hrtimer *timer}(hhhjhhhNhNubah}(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.chMhjxubj)}(hhh]j6)}(hhrtimer to stoph]hhrtimer to stop}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjYubjR)}(hhh]j`)}(hhh](jo)}(h0 when the timer was not activeh]j6)}(hjh]h0 when the timer was not active}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM"hjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(h1 when the timer was activeh]j6)}(hjh]h1 when the timer was active}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM#hjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(hT-1 when the timer is currently executing the callback function and cannot be stoppedh]j6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM$hjubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajuh1j`hjhM"hjubah}(h]h ]h"]h$]h&]uh1jQhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_cancel (C function)c.hrtimer_cancelhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*int hrtimer_cancel (struct hrtimer *timer)h]h)}(h)int hrtimer_cancel(struct hrtimer *timer)h](j)}(hinth]hint}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFhhhjXhMubh)}(hhrtimer_cancelh]h)}(hhrtimer_cancelh]hhrtimer_cancel}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhMubj)}(h(struct hrtimer *timer)h]j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jmsbc.hrtimer_cancelasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj?hhubj)}(hhh]j6)}(h2cancel a timer and wait for the handler to finish.h]h2cancel a timer and wait for the handler to finish.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhjhNhNubjl)}(h**Parameters** ``struct hrtimer *timer`` the timer to be cancelled **Return** 0 when the timer was not active 1 when the timer was activeh](j6)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj'ubj)}(hhh]j)}(h4``struct hrtimer *timer`` the timer to be cancelled h](j)}(h``struct hrtimer *timer``h]j<)}(hjLh]hstruct hrtimer *timer}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjFubj)}(hhh]j6)}(hthe timer to be cancelledh]hthe timer to be cancelled}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj'ubjR)}(hhh]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jQhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__hrtimer_get_remaining (C function)c.__hrtimer_get_remaininghNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]__hrtimer_get_remainingsbc.__hrtimer_get_remainingasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h__hrtimer_get_remainingh]h)}(hjh]h__hrtimer_get_remaining}(hhhj hhhNhNubah}(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')}(hjn'h]hconst}(hhhj'hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj')}(hj*h]hstruct}(hhhjBhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#ubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjbmodnameN classnameNjajd)}jg]jc.__hrtimer_get_remainingasbuh1hhj#ubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#ubh)}(htimerh]htimer}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h bool adjusth](j)}(hjh]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hadjusth]hadjust}(hhhjhhhNhNubah}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubj)}(hhh]j6)}(h get remaining time for the timerh]h get remaining time for the timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h**Parameters** ``const struct hrtimer *timer`` the timer to read ``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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<)}(hj9h]hconst struct hrtimer *timer}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj3ubj)}(hhh]j6)}(hthe timer to readh]hthe timer to read}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubj)}(hA``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](j)}(h``bool adjust``h]j<)}(hjrh]h bool adjust}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjlubj)}(hhh]j6)}(h1adjust relative timers when CONFIG_TIME_LOW_RES=yh]h1adjust relative timers when CONFIG_TIME_LOW_RES=y}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_init (C function)c.hrtimer_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(hUvoid hrtimer_init (struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hTvoid hrtimer_init(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM-ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM-ubh)}(h hrtimer_inith]h)}(h hrtimer_inith]h hrtimer_init}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM-ubj)}(hC(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode)h](j$)}(hstruct hrtimer *timerh](j')}(hj*h]hstruct}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]jj)}j]jsbc.hrtimer_initasbuh1hhjubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htimerh]htimer}(hhhjbhhhNhNubah}(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}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jCc.hrtimer_initasbuh1hhjwubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwubh)}(hclock_idh]hclock_id}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(henum hrtimer_mode modeh](j')}(hjih]henum}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jCc.hrtimer_initasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmodeh]hmode}(hhhj 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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM7hjhhubj)}(hhh]j6)}(h%initialize a timer to the given clockh]h%initialize a timer to the given clock}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM,hj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhjhNhNubjl)}(hX**Parameters** ``struct hrtimer *timer`` the timer to be initialized ``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 The PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM0hjTubj)}(hhh](j)}(h6``struct hrtimer *timer`` the timer to be initialized h](j)}(h``struct hrtimer *timer``h]j<)}(hjyh]hstruct hrtimer *timer}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM-hjsubj)}(hhh]j6)}(hthe timer to be initializedh]hthe timer to be initialized}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjpubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]j<)}(hjh]hclockid_t clock_id}(hhhjhhhNhNubah}(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]j6)}(hthe clock to be usedh]hthe clock to be used}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjpubj)}(hX``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 The PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh](j)}(h``enum hrtimer_mode mode``h]j<)}(hjh]henum hrtimer_mode mode}(hhhjhhhNhNubah}(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.chM4hjubj)}(hhh](j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM/hjubj6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM3hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjpubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*hrtimer_sleeper_start_expires (C function)c.hrtimer_sleeper_start_expireshNtauh1hhjhhhNhNubh)}(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}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPhhhjbhMubh)}(hhrtimer_sleeper_start_expiresh]h)}(hhrtimer_sleeper_start_expiresh]hhrtimer_sleeper_start_expires}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjbhMubj)}(h4(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j$)}(hstruct hrtimer_sleeper *slh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jwsbc.hrtimer_sleeper_start_expiresasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hslh]hsl}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(henum hrtimer_mode modeh](j')}(hjih]henum}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jc.hrtimer_sleeper_start_expiresasbuh1hhjubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmodeh]hmode}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjbhMubah}(h]jGah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjIhhubj)}(hhh]j6)}(hStart a hrtimer sleeper timerh]hStart a hrtimer sleeper timer}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hsleeper to be startedh]hsleeper to be started}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(htimer mode abs/relh]htimer mode abs/rel}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj6)}(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)}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!hrtimer_init_sleeper (C function)c.hrtimer_init_sleeperhNtauh1hhjhhhNhNubh)}(hhh](h)}(hbvoid hrtimer_init_sleeper (struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h]h)}(havoid hrtimer_init_sleeper(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnhhhjhMubh)}(hhrtimer_init_sleeperh]h)}(hhrtimer_init_sleeperh]hhrtimer_init_sleeper}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhMubj)}(hH(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j$)}(hstruct hrtimer_sleeper *slh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.hrtimer_init_sleeperasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hslh]hsl}(hhhjhhhNhNubah}(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}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&modnameN classnameNjajd)}jg]jc.hrtimer_init_sleeperasbuh1hhjubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hclock_idh]hclock_id}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(henum hrtimer_mode modeh](j')}(hjih]henum}(hhhjihhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjeubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.hrtimer_init_sleeperasbuh1hhjeubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubh)}(hmodeh]hmode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjghhubj)}(hhh]j6)}(h%initialize sleeper to the given clockh]h%initialize sleeper to the given clock}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(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}(hhhj!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]j6)}(hsleeper to be initializedh]hsleeper to be initialized}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]j<)}(hjXh]hclockid_t clock_id}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjRubj)}(hhh]j6)}(hthe clock to be usedh]hthe clock to be used}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(h-``enum hrtimer_mode mode`` timer mode abs/relh](j)}(h``enum hrtimer_mode mode``h]j<)}(hjh]henum hrtimer_mode mode}(hhhjhhhNhNubah}(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]j6)}(htimer mode abs/relh]htimer mode abs/rel}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+schedule_hrtimeout_range_clock (C function) c.schedule_hrtimeout_range_clockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hrint schedule_hrtimeout_range_clock (ktime_t *expires, u64 delta, const enum hrtimer_mode mode, clockid_t clock_id)h]h)}(hqint schedule_hrtimeout_range_clock(ktime_t *expires, u64 delta, const enum hrtimer_mode mode, clockid_t clock_id)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hschedule_hrtimeout_range_clockh]h)}(hschedule_hrtimeout_range_clockh]hschedule_hrtimeout_range_clock}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hO(ktime_t *expires, u64 delta, const enum hrtimer_mode mode, clockid_t clock_id)h](j$)}(hktime_t *expiresh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}j]jsb c.schedule_hrtimeout_range_clockasbuh1hhj$ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj~)}(hjh]h*}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$ubh)}(hexpiresh]hexpires}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h u64 deltah](h)}(hhh]h)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jG c.schedule_hrtimeout_range_clockasbuh1hhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubh)}(hdeltah]hdelta}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hconst enum hrtimer_mode modeh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hjih]henum}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jG c.schedule_hrtimeout_range_clockasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmodeh]hmode}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hclockid_t clock_idh](h)}(hhh]h)}(h clockid_th]h clockid_t}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjJmodnameN classnameNjajd)}jg]jG c.schedule_hrtimeout_range_clockasbuh1hhjAubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hclock_idh]hclock_id}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubj)}(hhh]j6)}(hsleep until timeouth]hsleep until timeout}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h**Parameters** ``ktime_t *expires`` timeout value (ktime_t) ``u64 delta`` slack in expires timeout (ktime_t) for SCHED_OTHER tasks ``const enum hrtimer_mode mode`` timer mode ``clockid_t clock_id`` timer clock to be usedh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh](j)}(h-``ktime_t *expires`` timeout value (ktime_t) h](j)}(h``ktime_t *expires``h]j<)}(hjh]hktime_t *expires}(hhhjhhhNhNubah}(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]j6)}(htimeout value (ktime_t)h]htimeout value (ktime_t)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``u64 delta`` slack in expires timeout (ktime_t) for SCHED_OTHER tasks h](j)}(h ``u64 delta``h]j<)}(hjh]h u64 delta}(hhhjhhhNhNubah}(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]j6)}(h8slack in expires timeout (ktime_t) for SCHED_OTHER tasksh]h8slack in expires timeout (ktime_t) for SCHED_OTHER tasks}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubj)}(h,``const enum hrtimer_mode mode`` timer mode h](j)}(h ``const enum hrtimer_mode mode``h]j<)}(hjRh]hconst enum hrtimer_mode mode}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjLubj)}(hhh]j6)}(h timer modeh]h timer mode}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjubj)}(h-``clockid_t clock_id`` timer clock to be usedh](j)}(h``clockid_t clock_id``h]j<)}(hjh]hclockid_t clock_id}(hhhjhhhNhNubah}(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]j6)}(htimer clock to be usedh]htimer clock to be used}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%schedule_hrtimeout_range (C function)c.schedule_hrtimeout_rangehNtauh1hhjhhhNhNubh)}(hhh](h)}(hXint schedule_hrtimeout_range (ktime_t *expires, u64 delta, const enum hrtimer_mode mode)h]h)}(hWint schedule_hrtimeout_range(ktime_t *expires, u64 delta, const enum hrtimer_mode mode)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hschedule_hrtimeout_rangeh]h)}(hschedule_hrtimeout_rangeh]hschedule_hrtimeout_range}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h;(ktime_t *expires, u64 delta, const enum hrtimer_mode mode)h](j$)}(hktime_t *expiresh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]jj)}j]jsbc.schedule_hrtimeout_rangeasbuh1hhjubj9)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hexpiresh]hexpires}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h u64 deltah](h)}(hhh]h)}(hu64h]hu64}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]jAc.schedule_hrtimeout_rangeasbuh1hhjuubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuubh)}(hdeltah]hdelta}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst enum hrtimer_mode modeh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hjih]henum}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jAc.schedule_hrtimeout_rangeasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmodeh]hmode}(hhhj& 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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjhhubj)}(hhh]j6)}(hsleep until timeouth]hsleep until timeout}(hjS hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjN hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2ji j3ji j4uh1hhhhjhNhNubjl)}(hX4**Parameters** ``ktime_t *expires`` timeout value (ktime_t) ``u64 delta`` slack in expires timeout (ktime_t) for SCHED_OTHER tasks ``const enum hrtimer_mode mode`` timer mode **Description** Make the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()). The **delta** argument gives the kernel the freedom to schedule the actual wakeup to a time that is both power and performance friendly for regular (non RT/DL) tasks. The kernel give the normal best effort behavior for "**expires**+**delta**", but may decide to fire the timer earlier, but no earlier than **expires**. You can set the task state as follows - ``TASK_UNINTERRUPTIBLE`` - at least **timeout** time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()). ``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up. The current task state is guaranteed to be TASK_RUNNING when this routine returns. Returns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.h](j6)}(h**Parameters**h]jv)}(hjs h]h Parameters}(hhhju hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjq ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj)}(hhh](j)}(h-``ktime_t *expires`` timeout value (ktime_t) h](j)}(h``ktime_t *expires``h]j<)}(hj h]hktime_t *expires}(hhhj 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]j6)}(htimeout value (ktime_t)h]htimeout value (ktime_t)}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hG``u64 delta`` slack in expires timeout (ktime_t) for SCHED_OTHER tasks h](j)}(h ``u64 delta``h]j<)}(hj h]h u64 delta}(hhhj 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]j6)}(h8slack in expires timeout (ktime_t) for SCHED_OTHER tasksh]h8slack in expires timeout (ktime_t) for SCHED_OTHER tasks}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h,``const enum hrtimer_mode mode`` timer mode h](j)}(h ``const enum hrtimer_mode mode``h]j<)}(hj!h]hconst enum hrtimer_mode mode}(hhhj!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.chM hj ubj)}(hhh]j6)}(h timer modeh]h timer mode}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!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 ubj6)}(h**Description**h]jv)}(hj?!h]h Description}(hhhjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=!ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(hMake the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()).h]hMake the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()).}(hjW!hjU!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(hX>The **delta** argument gives the kernel the freedom to schedule the actual wakeup to a time that is both power and performance friendly for regular (non RT/DL) tasks. The kernel give the normal best effort behavior for "**expires**+**delta**", but may decide to fire the timer earlier, but no earlier than **expires**.h](hThe }(hThe hjd!hhhNhNubjv)}(h **delta**h]hdelta}(hhhjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd!ubh argument gives the kernel the freedom to schedule the actual wakeup to a time that is both power and performance friendly for regular (non RT/DL) tasks. The kernel give the normal best effort behavior for “}(h argument gives the kernel the freedom to schedule the actual wakeup to a time that is both power and performance friendly for regular (non RT/DL) tasks. The kernel give the normal best effort behavior for "hjd!hhhNhNubjv)}(h**expires**+**delta**h]hexpires**+**delta}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd!ubhC”, but may decide to fire the timer earlier, but no earlier than }(hA", but may decide to fire the timer earlier, but no earlier than hjd!hhhNhNubjv)}(h **expires**h]hexpires}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd!ubh.}(hjPhjd!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(h'You can set the task state as follows -h]h'You can set the task state as follows -}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(h``TASK_UNINTERRUPTIBLE`` - at least **timeout** time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).h](j<)}(h``TASK_UNINTERRUPTIBLE``h]hTASK_UNINTERRUPTIBLE}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!ubh - at least }(h - at least hj!hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubh time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).}(h time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(h``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.h](j<)}(h``TASK_INTERRUPTIBLE``h]hTASK_INTERRUPTIBLE}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!ubhx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.}(hx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(hRThe current task state is guaranteed to be TASK_RUNNING when this routine returns.h]hRThe current task state is guaranteed to be TASK_RUNNING when this routine returns.}(hj "hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubj6)}(hReturns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.h]hReturns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjm ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌschedule_hrtimeout (C function)c.schedule_hrtimeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(hGint schedule_hrtimeout (ktime_t *expires, const enum hrtimer_mode mode)h]h)}(hFint schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode)h](j)}(hinth]hint}(hhhjH"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD"hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM' ubj9)}(h h]h }(hhhjW"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjD"hhhjV"hM' ubh)}(hschedule_hrtimeouth]h)}(hschedule_hrtimeouth]hschedule_hrtimeout}(hhhji"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjD"hhhjV"hM' ubj)}(h0(ktime_t *expires, const enum hrtimer_mode mode)h](j$)}(hktime_t *expiresh](h)}(hhh]h)}(hktime_th]hktime_t}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj"modnameN classnameNjajd)}jg]jj)}j]jk"sbc.schedule_hrtimeoutasbuh1hhj"ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj~)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"ubh)}(hexpiresh]hexpires}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj}"ubj$)}(hconst enum hrtimer_mode modeh](j')}(hjn'h]hconst}(hhhj"hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj"ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj')}(hjih]henum}(hhhj"hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj"ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]j"c.schedule_hrtimeoutasbuh1hhj"ubj9)}(h h]h }(hhhj3#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hmodeh]hmode}(hhhjA#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(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&]juh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM? hj="hhubj)}(hhh]j6)}(hsleep until timeouth]hsleep until timeout}(hjn#hjl#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM& hji#hhubah}(h]h ]h"]h$]h&]uh1jhj="hhhjV"hM' ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhjhNhNubjl)}(hX**Parameters** ``ktime_t *expires`` timeout value (ktime_t) ``const enum hrtimer_mode mode`` timer mode **Description** Make the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()). You can set the task state as follows - ``TASK_UNINTERRUPTIBLE`` - at least **timeout** time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()). ``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up. The current task state is guaranteed to be TASK_RUNNING when this routine returns. Returns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.h](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM* hj#ubj)}(hhh](j)}(h-``ktime_t *expires`` timeout value (ktime_t) h](j)}(h``ktime_t *expires``h]j<)}(hj#h]hktime_t *expires}(hhhj#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.chM' hj#ubj)}(hhh]j6)}(htimeout value (ktime_t)h]htimeout value (ktime_t)}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hM' hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM' hj#ubj)}(h,``const enum hrtimer_mode mode`` timer mode h](j)}(h ``const enum hrtimer_mode mode``h]j<)}(hj#h]hconst enum hrtimer_mode mode}(hhhj#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.chM( hj#ubj)}(hhh]j6)}(h timer modeh]h timer mode}(hj$hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#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#ubj6)}(h**Description**h]jv)}(hj!$h]h Description}(hhhj#$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM* hj#ubj6)}(hMake the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()).h]hMake the current task sleep until the given expiry time has elapsed. The routine will return immediately unless the current task state has been set (see set_current_state()).}(hj9$hj7$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM* hj#ubj6)}(h'You can set the task state as follows -h]h'You can set the task state as follows -}(hjH$hjF$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM. hj#ubj6)}(h``TASK_UNINTERRUPTIBLE`` - at least **timeout** time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).h](j<)}(h``TASK_UNINTERRUPTIBLE``h]hTASK_UNINTERRUPTIBLE}(hhhjY$hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjU$ubh - at least }(h - at least hjU$hhhNhNubjv)}(h **timeout**h]htimeout}(hhhjl$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU$ubh time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).}(h time is guaranteed to pass before the routine returns unless the current task is explicitly woken up, (e.g. by wake_up_process()).hjU$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM0 hj#ubj6)}(h``TASK_INTERRUPTIBLE`` - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.h](j<)}(h``TASK_INTERRUPTIBLE``h]hTASK_INTERRUPTIBLE}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$ubhx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.}(hx - the routine may return early if a signal is delivered to the current task or the current task is explicitly woken up.hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM4 hj#ubj6)}(hRThe current task state is guaranteed to be TASK_RUNNING when this routine returns.h]hRThe current task state is guaranteed to be TASK_RUNNING when this routine returns.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM8 hj#ubj6)}(hReturns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.h]hReturns 0 when the timer has expired. If the task was woken before the timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or by an explicit wakeup, it returns -EINTR.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM; hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubeh}(h]high-resolution-timersah ]h"]high-resolution timersah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hWait queues and Wake eventsh]hWait queues and Wake events}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhK=ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwaitqueue_active (C function)c.waitqueue_activehNtauh1hhj$hhhNhNubh)}(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}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKaubj9)}(h h]h }(hhhj %hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$hhhj %hKaubh)}(hwaitqueue_activeh]h)}(hwaitqueue_activeh]hwaitqueue_active}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj %hKaubj)}(h!(struct wait_queue_head *wq_head)h]j$)}(hstruct wait_queue_head *wq_headh](j')}(hj*h]hstruct}(hhhj8%hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj4%ubj9)}(h h]h }(hhhjE%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4%ubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hhhjV%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS%ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjX%modnameN classnameNjajd)}jg]jj)}j]j%sbc.waitqueue_activeasbuh1hhj4%ubj9)}(h h]h }(hhhjv%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4%ubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4%ubh)}(hwq_headh]hwq_head}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0%ubah}(h]h ]h"]h$]h&]jj uh1jhj$hhhj %hKaubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj %hKaubah}(h]j$ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK}hj$hhubj)}(hhh]j`)}(hhh]jo)}(h(locklessly test for waiters on the queueh]j6)}(hj%h]h(locklessly test for waiters on the queue}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK`hj%ubah}(h]h ]h"]h$]h&]uh1jnhj%hhhj%hNubah}(h]h ]h"]h$]h&]jajauh1j`hj%hK`hj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj %hKaubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j%j3j%j4uh1hhhhj$hNhNubjl)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue to test for waiters **Description** returns true if the wait list is not empty 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. **NOTE** this function is lockless and requires care, incorrect usage _will_ lead to sporadic and non-obvious failure.h](j6)}(h**Parameters**h]jv)}(hj%h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKdhj%ubj)}(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<)}(hj&h]hstruct wait_queue_head *wq_head}(hhhj&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.hhKahj &ubj)}(hhh]j6)}(h!the waitqueue to test for waitersh]h!the waitqueue to test for waiters}(hj*&hj(&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$&hKahj%&ubah}(h]h ]h"]h$]h&]uh1jhj &ubeh}(h]h ]h"]h$]h&]uh1jhj$&hKahj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubj6)}(h**Description**h]jv)}(hjJ&h]h Description}(hhhjL&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjH&ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKchj%ubj6)}(h*returns true if the wait list is not emptyh]h*returns true if the wait list is not empty}(hjb&hj`&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKchj%ubj6)}(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:}(hdUse either while holding wait_queue_head::lock or when used for wakeups with an extra smp_mb() like:hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKehj%ubj)}(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);}(hhhj&ubah}(h]h ]h"]h$]h&]jj uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhhj%ubj6)}(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 }(hlBecause without the explicit smp_mb() it's possible for the waitqueue_active() load to get hoisted over the hj&hhhNhNubjv)}(h**cond**h]hcond}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubhW store such that we’ll observe an empty wait list while the waiter might not observe }(hU store such that we'll observe an empty wait list while the waiter might not observe hj&hhhNhNubjv)}(h**cond**h]hcond}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh.}(hjPhj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKshj%ubj6)}(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.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKwhj%ubj6)}(h**NOTE**h]jv)}(hj&h]hNOTE}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKzhj%ubj6)}(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.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKehj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"wq_has_single_sleeper (C function)c.wq_has_single_sleeperhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h)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]j(ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj(hhubj)}(hhh]j6)}(h(check if there are any waiting processesh]h(check if there are any waiting processes}(hjk)hji)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjf)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j)j3j)j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj)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}(hhhj)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]j6)}(hwait queue headh]hwait queue head}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h**Description**h]jv)}(hj)h]h Description}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj)ubj6)}(h-Returns true if wq_head has waiting processesh]h-Returns true if wq_head has waiting processes}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj)ubj6)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hj *hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwake_up_pollfree (C function)c.wake_up_pollfreehNtauh1hhj$hhhNhNubh)}(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}(hhhj9*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5*hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubj9)}(h h]h }(hhhjH*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5*hhhjG*hKubh)}(hwake_up_pollfreeh]h)}(hwake_up_pollfreeh]hwake_up_pollfree}(hhhjZ*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5*hhhjG*hKubj)}(h!(struct wait_queue_head *wq_head)h]j$)}(hstruct wait_queue_head *wq_headh](j')}(hj*h]hstruct}(hhhjv*hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjr*ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjr*ubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]jj)}j]j\*sbc.wake_up_pollfreeasbuh1hhjr*ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjr*ubj~)}(hjh]h*}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjr*ubh)}(hwq_headh]hwq_head}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjn*ubah}(h]h ]h"]h$]h&]jj uh1jhj5*hhhjG*hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1*hhhjG*hKubah}(h]j,*ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj.*hhubj)}(hhh]j6)}(h,signal that a polled waitqueue is going awayh]h,signal that a polled waitqueue is going away}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1jhj.*hhhjG*hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj+h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj+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}(hhhj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj5+ubj)}(hhh]j6)}(hthe wait queue headh]hthe wait queue head}(hjV+hjT+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjP+hKhjQ+ubah}(h]h ]h"]h$]h&]uh1jhj5+ubeh}(h]h ]h"]h$]h&]uh1jhjP+hKhj2+ubah}(h]h ]h"]h$]h&]uh1jhj+ubj6)}(h**Description**h]jv)}(hjv+h]h Description}(hhhjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt+ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj+ubj6)}(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.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj+ubj6)}(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.}(hj+hj+hhhNhNubah}(h]h ]h"]h$ ]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event (C macro) c.wait_eventhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h wait_eventh]h)}(h wait_eventh]h)}(h wait_eventh]h)}(hj+h]h wait_event}(hhhj+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.hhMTubah}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj+hMTubah}(h]j+ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMShj+hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMTubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhj$hNhNubj6)}(h#``wait_event (wq_head, condition)``h]j<)}(hj,h]hwait_event (wq_head, condition)}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj+ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMHhj,ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5,h]h Parameters}(hhhj7,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3,ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMLhj/,ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjT,h]hwq_head}(hhhjV,hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjR,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMIhjN,ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjo,hjm,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hji,hMIhjj,ubah}(h]h ]h"]h$]h&]uh1jhjN,ubeh}(h]h ]h"]h$]h&]uh1jhji,hMIhjK,ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj,h]h condition}(hhhj,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.hhMJhj,ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMJhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMJhjK,ubeh}(h]h ]h"]h$]h&]uh1jhj/,ubj6)}(h**Description**h]jv)}(hj,h]h Description}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMLhj/,ubj6)}(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 }(h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the hj,hhhNhNubjv)}(h **condition**h]h condition}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh evaluates to true. The }(h evaluates to true. The hj,hhhNhNubjv)}(h **condition**h]h condition}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj,hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj -hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh is woken up.}(h is woken up.hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMLhj/,ubj6)}(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)-hj'-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhj/,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_freezable (C macro)c.wait_event_freezablehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]h)}(hjP-h]hwait_event_freezable}(hhhjZ-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjR-hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM{ubah}(h]h ]h"]h$]h&]jj juh1hjjhjN-hhhjm-hM{ubah}(h]jI-ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMzhjK-hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjK-hhhjm-hM{ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j-j3j-j4uh1hhhhj$hNhNubj6)}(h-``wait_event_freezable (wq_head, condition)``h]j<)}(hj-h]h)wait_event_freezable (wq_head, condition)}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj-ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM|hj$hhubjR)}(hhh]j6)}(h-sleep (or freeze) until a condition gets trueh]h-sleep (or freeze) until a condition gets true}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMohj-ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshj-ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hj-h]hwq_head}(hhhj-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.hhMphj-ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMphj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMphj-ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj.h]h condition}(hhhj.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.hhMqhj.ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj4.hj2.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj..hMqhj/.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj..hMqhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubj6)}(h**Description**h]jv)}(hjT.h]h Description}(hhhjV.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjR.ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshj-ubj6)}(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 }(heThe process is put to sleep (TASK_INTERRUPTIBLE -- so as not to contribute to system load) until the hjj.hhhNhNubjv)}(h **condition**h]h condition}(hhhjs.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj.ubh evaluates to true. The }(h evaluates to true. The hjj.hhhNhNubjv)}(h **condition**h]h condition}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj.ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjj.hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj.ubh is woken up.}(h is woken up.hjj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshj-ubj6)}(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.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_timeout (C macro)c.wait_event_timeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hj.h]hwait_event_timeout}(hhhj.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&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj.hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhj$hNhNubj6)}(h4``wait_event_timeout (wq_head, condition, timeout)``h]j<)}(hj/h]h0wait_event_timeout (wq_head, condition, timeout)}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj4/hj2/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj//ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjM/h]h Parameters}(hhhjO/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjK/ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjl/h]hwq_head}(hhhjn/hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjj/ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjf/ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjf/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjc/ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj/h]h condition}(hhhj/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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjc/ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j<)}(hj/h]htimeout}(hhhj/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]j6)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjc/ubeh}(h]h ]h"]h$]h&]uh1jhjG/ubj6)}(h**Description**h]jv)}(hj0h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubj6)}(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 }(h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the hj/0hhhNhNubjv)}(h **condition**h]h condition}(hhhj80hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/0ubh evaluates to true. The }(h evaluates to true. The hj/0hhhNhNubjv)}(h **condition**h]h condition}(hhhjK0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/0ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj/0hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj^0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/0ubh is woken up.}(h is woken up.hj/0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubj6)}(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.}(hjz0hjx0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubj6)}(h **Return**h]jv)}(hj0h]hReturn}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubj6)}(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 }(h 0 if the hj0hhhNhNubjv)}(h **condition**h]h condition}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh evaluated to }(h evaluated to hj0hhhNhNubj<)}(h ``false``h]hfalse}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubh after the }(h after the hj0hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh elapsed, 1 if the }(h elapsed, 1 if the hj0hhhNhNubjv)}(h **condition**h]h condition}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh evaluated to }(hj0hj0ubj<)}(h``true``h]htrue}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubh after the }(hj0hj0ubjv)}(h **timeout**h]htimeout}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh7 elapsed, or the remaining jiffies (at least 1) if the }(h7 elapsed, or the remaining jiffies (at least 1) if the hj0hhhNhNubjv)}(h **condition**h]h condition}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh evaluated to }(h evaluated to hj0hhhNhNubj<)}(h``true``h]htrue}(hhhj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubh before the }(h before the hj0hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj>1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh elapsed.}(h elapsed.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjG/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_cmd (C macro)c.wait_event_cmdhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hjr1h]hwait_event_cmd}(hhhj|1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjt1hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjp1hhhj1hMubah}(h]jk1ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjm1hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjm1hhhj1hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhj$hNhNubj6)}(h3``wait_event_cmd (wq_head, condition, cmd1, cmd2)``h]j<)}(hj1h]h/wait_event_cmd (wq_head, condition, cmd1, cmd2)}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hj2h]hwq_head}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj;2h]h condition}(hhhj=2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj92ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj52ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjV2hjT2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjP2hMhjQ2ubah}(h]h ]h"]h$]h&]uh1jhj52ubeh}(h]h ]h"]h$]h&]uh1jhjP2hMhj1ubj)}(h3``cmd1`` the command will be executed before sleep h](j)}(h``cmd1``h]j<)}(hjt2h]hcmd1}(hhhjv2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjr2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjn2ubj)}(hhh]j6)}(h)the command will be executed before sleeph]h)the command will be executed before sleep}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjn2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubj)}(h2``cmd2`` the command will be executed after sleep h](j)}(h``cmd2``h]j<)}(hj2h]hcmd2}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj2ubj)}(hhh]j6)}(h(the command will be executed after sleeph]h(the command will be executed after sleep}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hj2h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubj6)}(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 }(h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the hj2hhhNhNubjv)}(h **condition**h]h condition}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh evaluates to true. The }(h evaluates to true. The hj2hhhNhNubjv)}(h **condition**h]h condition}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj2hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj-3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh is woken up.}(h is woken up.hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubj6)}(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.}(hjI3hjG3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"wait_event_interruptible (C macro)c.wait_event_interruptiblehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hjp3h]hwait_event_interruptible}(hhhjz3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjr3hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjn3hhhj3hMubah}(h]ji3ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjk3hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjk3hhhj3hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhj$hNhNubj6)}(h1``wait_event_interruptible (wq_head, condition)``h]j<)}(hj3h]h-wait_event_interruptible (wq_head, condition)}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hV/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<)}(hj4h]hwq_head}(hhhj4hhhNhNubah}(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]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj94h]h condition}(hhhj;4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj74ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj34ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjT4hjR4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjN4hMhjO4ubah}(h]h ]h"]h$]h&]uh1jhj34ubeh}(h]h ]h"]h$]h&]uh1jhjN4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hjt4h]h Description}(hhhjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr4ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hj4hhhNhNubjv)}(h **condition**h]h condition}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hj4hhhNhNubjv)}(h **condition**h]h condition}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj4hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh is woken up.}(h is woken up.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj6)}(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.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hj4hhhNhNubjv)}(h **condition**h]h condition}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh evaluated to true.}(h evaluated to true.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*wait_event_interruptible_timeout (C macro)"c.wait_event_interruptible_timeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(hj5h]h wait_event_interruptible_timeout}(hhhj)5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!5hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj<5hMubah}(h]j5ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj5hhhj<5hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jV5j3jV5j4uh1hhhhj$hNhNubj6)}(hB``wait_event_interruptible_timeout (wq_head, condition, timeout)``h]j<)}(hj\5h]h>wait_event_interruptible_timeout (wq_head, condition, timeout)}(hhhj^5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZ5ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjw5hju5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjr5ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hj5h]hwq_head}(hhhj5hhhNhNubah}(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]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj5h]h condition}(hhhj5hhhNhNubah}(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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j<)}(hj!6h]htimeout}(hhhj#6hhhNhNubah}(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]j6)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj<6hj:6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj66hMhj76ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj66hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hj\6h]h Description}(hhhj^6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZ6ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjr6hhhNhNubjv)}(h **condition**h]h condition}(hhhj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr6ubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjr6hhhNhNubjv)}(h **condition**h]h condition}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr6ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjr6hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr6ubh is woken up.}(h is woken up.hjr6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubj6)}(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.}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubj6)}(h **Return**h]jv)}(hj6h]hReturn}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hj5ubj6)}(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 }(h 0 if the hj6hhhNhNubjv)}(h **condition**h]h condition}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh evaluated to }(h evaluated to hj6hhhNhNubj<)}(h ``false``h]hfalse}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubh after the }(h after the hj6hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh elapsed, 1 if the }(h elapsed, 1 if the hj6hhhNhNubjv)}(h **condition**h]h condition}(hhhj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh evaluated to }(hj6hj6ubj<)}(h``true``h]htrue}(hhhj67hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubh after the }(hj7hj6ubjv)}(h **timeout**h]htimeout}(hhhjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh4 elapsed, the remaining jiffies (at least 1) if the }(h4 elapsed, the remaining jiffies (at least 1) if the hj6hhhNhNubjv)}(h **condition**h]h condition}(hhhj[7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh evaluated to }(h evaluated to hj6hhhNhNubj<)}(h``true``h]htrue}(hhhjn7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubh before the }(h before the hj6hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh elapsed, or -}(h elapsed, or -hj6hhhNhNubj<)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubh# if it was interrupted by a signal.}(h# if it was interrupted by a signal.hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_hrtimeout (C macro)c.wait_event_hrtimeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hj7h]hwait_event_hrtimeout}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMEubah}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hMEubah}(h]j7ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMDhj7hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMEubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhj$hNhNubj6)}(h6``wait_event_hrtimeout (wq_head, condition, timeout)``h]j<)}(hj8h]h2wait_event_hrtimeout (wq_head, condition, timeout)}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMFhj$hhubjR)}(hhh]j6)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj 8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM5hj8ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj98h]h Parameters}(hhhj;8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj78ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM9hj38ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjX8h]hwq_head}(hhhjZ8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjV8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hjR8ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjs8hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjm8hM6hjn8ubah}(h]h ]h"]h$]h&]uh1jhjR8ubeh}(h]h ]h"]h$]h&]uh1jhjm8hM6hjO8ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj8h]h condition}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM7hj8ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hM7hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM7hjO8ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]j<)}(hj8h]htimeout}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hj8ubj)}(hhh]j6)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hM8hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM8hjO8ubeh}(h]h ]h"]h$]h&]uh1jhj38ubj6)}(h**Description**h]jv)}(hj9h]h Description}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM:hj38ubj6)}(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 }(h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the hj9hhhNhNubjv)}(h **condition**h]h condition}(hhhj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hj9hhhNhNubjv)}(h **condition**h]h condition}(hhhj79hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj9hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjJ9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh is woken up.}(h is woken up.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM:hj38ubj6)}(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.}(hjf9hjd9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hj38ubj6)}(hVThe function returns 0 if **condition** became true, or -ETIME if the timeout elapsed.h](hThe function returns 0 if }(hThe function returns 0 if hjs9hhhNhNubjv)}(h **condition**h]h condition}(hhhj|9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjs9ubh/ became true, or -ETIME if the timeout elapsed.}(h/ became true, or -ETIME if the timeout elapsed.hjs9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMAhj38ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,wait_event_interruptible_hrtimeout (C macro)$c.wait_event_interruptible_hrtimeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(hj9h]h"wait_event_interruptible_hrtimeout}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM_ubah}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj9hM_ubah}(h]j9ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM^hj9hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj9hhhj9hM_ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j9j3j9j4uh1hhhhj$hNhNubj6)}(h?``wait_event_interruptible_hrtimeout (wq, condition, timeout)``h]j<)}(hj9h]h;wait_event_interruptible_hrtimeout (wq, condition, timeout)}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM`hj$hhubjR)}(hhh]j6)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMOhj:ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!:h]h Parameters}(hhhj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMShj:ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j<)}(hj@:h]hwq}(hhhjB: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.hhMPhj::ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj[:hjY:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjU:hMPhjV:ubah}(h]h ]h"]h$]h&]uh1jhj::ubeh}(h]h ]h"]h$]h&]uh1jhjU:hMPhj7:ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjy:h]h condition}(hhhj{: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.hhMQhjs:ubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMQhj:ubah}(h]h ]h"]h$]h&]uh1jhjs:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMQhj7:ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]j<)}(hj:h]htimeout}(hhhj: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.hhMRhj:ubj)}(hhh]j6)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMRhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMRhj7:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThj:ubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hj;hhhNhNubjv)}(h **condition**h]h condition}(hhhj ;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hj;hhhNhNubjv)}(h **condition**h]h condition}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj;hhhNhNubjv)}(h**wq**h]hwq}(hhhj2;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh is woken up.}(h is woken up.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThj:ubj6)}(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.}(hjN;hjL;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhj:ubj6)}(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 }(hThe function returns 0 if hj[;hhhNhNubjv)}(h **condition**h]h condition}(hhhjd;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[;ubh_ became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.}(h_ became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.hj[;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_idle (C macro)c.wait_event_idlehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hj;h]hwait_event_idle}(hhhj;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&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj;hhhj;hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhj$hNhNubj6)}(h(``wait_event_idle (wq_head, condition)``h]j<)}(hj;h]h$wait_event_idle (wq_head, condition)}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h8wait for a condition without contributing to system loadh]h8wait for a condition without contributing to system load}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj <h]h Parameters}(hhhj <hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hV/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}(hhhj*<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]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjC<hjA<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=<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<)}(hja<h]h condition}(hhhjc<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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj|<hjz<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjv<hMhjw<ubah}(h]h ]h"]h$]h&]uh1jhj[<ubeh}(h]h ]h"]h$]h&]uh1jhjv<hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubj6)}(h**Description**h]jv)}(hj<h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj<ubj6)}(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 }(h2The process is put to sleep (TASK_IDLE) until the hj<hhhNhNubjv)}(h **condition**h]h condition}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh evaluates to true. The }(h evaluates to true. The hj<hhhNhNubjv)}(h **condition**h]h condition}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj<hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh is woken up.}(h is woken up.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj<ubj6)}(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<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#wait_event_idle_exclusive (C macro)c.wait_event_idle_exclusivehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hj$=h]hwait_event_idle_exclusive}(hhhj.=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"=hhhjA=hMubah}(h]j=ah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj=hhhjA=hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j[=j3j[=j4uh1hhhhj$hNhNubj6)}(h2``wait_event_idle_exclusive (wq_head, condition)``h]j<)}(hja=h]h.wait_event_idle_exclusive (wq_head, condition)}(hhhjc=hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj_=ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h5wait for a condition with contributing to system loadh]h5wait for a condition with contributing to system load}(hj|=hjz=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjw=ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hV/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}(hhhj=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]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=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}(hhhj=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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h**Description**h]jv)}(hj(>h]h Description}(hhhj*>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&>ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=ubj6)}(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 }(h2The process is put to sleep (TASK_IDLE) until the hj>>hhhNhNubjv)}(h **condition**h]h condition}(hhhjG>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh evaluates to true. The }(h evaluates to true. The hj>>hhhNhNubjv)}(h **condition**h]h condition}(hhhjZ>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj>>hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh is woken up.}(h is woken up.hj>>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=ubj6)}(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>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=ubj6)}(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>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!wait_event_idle_timeout (C macro)c.wait_event_idle_timeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hj>h]hwait_event_idle_timeout}(hhhj>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&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj>hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>hhhj>hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j>j3j>j4uh1hhhhj$hNhNubj6)}(h9``wait_event_idle_timeout (wq_head, condition, timeout)``h]j<)}(hj>h]h5wait_event_idle_timeout (wq_head, condition, timeout)}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(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?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj?ubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0?h]h Parameters}(hhhj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.?ubah}(h]h ]h"]h$]h&]uh1j5hV/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<)}(hjO?h]hwq_head}(hhhjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjM?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjI?ubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjj?hjh?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjd?hMhje?ubah}(h]h ]h"]h$]h&]uh1jhjI?ubeh}(h]h ]h"]h$]h&]uh1jhjd?hMhjF?ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj?h]h condition}(hhhj?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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjF?ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j<)}(hj?h]htimeout}(hhhj?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]j6)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjF?ubeh}(h]h ]h"]h$]h&]uh1jhj*?ubj6)}(h**Description**h]jv)}(hj?h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*?ubj6)}(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 }(h2The process is put to sleep (TASK_IDLE) until the hj@hhhNhNubjv)}(h **condition**h]h condition}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh evaluates to true. The }(h evaluates to true. The hj@hhhNhNubjv)}(h **condition**h]h condition}(hhhj.@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hj@hhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjA@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh is woken up.}(h is woken up.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*?ubj6)}(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]@hj[@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*?ubj6)}(h **Return**h]jv)}(hjl@h]hReturn}(hhhjn@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj@ubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*?ubj6)}(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 }(h 0 if the hj@hhhNhNubjv)}(h **condition**h]h condition}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh evaluated to }(h evaluated to hj@hhhNhNubj<)}(h ``false``h]hfalse}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@ubh after the }(h after the hj@hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh elapsed, 1 if the }(h elapsed, 1 if the hj@hhhNhNubjv)}(h **condition**h]h condition}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh evaluated to }(hj@hj@ubj<)}(h``true``h]htrue}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@ubh after the }(hj@hj@ubjv)}(h **timeout**h]htimeout}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh7 elapsed, or the remaining jiffies (at least 1) if the }(h7 elapsed, or the remaining jiffies (at least 1) if the hj@hhhNhNubjv)}(h **condition**h]h condition}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh evaluated to }(h evaluated to hj@hhhNhNubj<)}(h``true``h]htrue}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@ubh before the }(h before the hj@hhhNhNubjv)}(h **timeout**h]htimeout}(hhhj!AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh elapsed.}(h elapsed.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+wait_event_idle_exclusive_timeout (C macro)#c.wait_event_idle_exclusive_timeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(hjUAh]h!wait_event_idle_exclusive_timeout}(hhhj_AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[Aubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWAhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjSAhhhjrAhMubah}(h]jNAah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPAhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjPAhhhjrAhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jAj3jAj4uh1hhhhj$hNhNubj6)}(hC``wait_event_idle_exclusive_timeout (wq_head, condition, timeout)``h]j<)}(hjAh]h?wait_event_idle_exclusive_timeout (wq_head, condition, timeout)}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(hFsleep without load until a condition becomes true or a timeout elapsesh]hFsleep without load until a condition becomes true or a timeout elapses}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjAh]hwq_head}(hhhjAhhhNhNubah}(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.hhMhjAubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjBhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjBh]h condition}(hhhj BhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjBubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj9Bhj7BhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3BhMhj4Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj3BhMhjAubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j<)}(hjWBh]htimeout}(hhhjYBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUBubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQBubj)}(hhh]j6)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjrBhjpBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlBhMhjmBubah}(h]h ]h"]h$]h&]uh1jhjQBubeh}(h]h ]h"]h$]h&]uh1jhjlBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj6)}(h**Description**h]jv)}(hjBh]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj6)}(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 }(h2The process is put to sleep (TASK_IDLE) until the hjBhhhNhNubjv)}(h **condition**h]h condition}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh evaluates to true. The }(h evaluates to true. The hjBhhhNhNubjv)}(h **condition**h]h condition}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjBhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh is woken up.}(h is woken up.hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj6)}(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.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj6)}(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.}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj6)}(h **Return**h]jv)}(hjCh]hReturn}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj6)}(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 }(h 0 if the hj'ChhhNhNubjv)}(h **condition**h]h condition}(hhhj0ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh evaluated to }(h evaluated to hj'ChhhNhNubj<)}(h ``false``h]hfalse}(hhhjCChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'Cubh after the }(h after the hj'ChhhNhNubjv)}(h **timeout**h]htimeout}(hhhjVChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh elapsed, 1 if the }(h elapsed, 1 if the hj'ChhhNhNubjv)}(h **condition**h]h condition}(hhhjiChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh evaluated to }(hjBChj'Cubj<)}(h``true``h]htrue}(hhhj{ChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'Cubh after the }(hjUChj'Cubjv)}(h **timeout**h]htimeout}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh7 elapsed, or the remaining jiffies (at least 1) if the }(h7 elapsed, or the remaining jiffies (at least 1) if the hj'ChhhNhNubjv)}(h **condition**h]h condition}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh evaluated to }(h evaluated to hj'ChhhNhNubj<)}(h``true``h]htrue}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'Cubh before the }(h before the hj'ChhhNhNubjv)}(h **timeout**h]htimeout}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Cubh elapsed.}(h elapsed.hj'ChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)wait_event_interruptible_locked (C macro)!c.wait_event_interruptible_lockedhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]h)}(hjCh]hwait_event_interruptible_locked}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM.ubah}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjDhM.ubah}(h]jCah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM-hjChhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjChhhjDhM.ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j1Dj3j1Dj4uh1hhhhj$hNhNubj6)}(h3``wait_event_interruptible_locked (wq, condition)``h]j<)}(hj7Dh]h/wait_event_interruptible_locked (wq, condition)}(hhhj9DhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5Dubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/hj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjRDhjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMDubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjkDh]h Parameters}(hhhjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiDubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjeDubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j<)}(hjDh]hwq}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjDh]h condition}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjeDubj6)}(h**Description**h]jv)}(hjDh]h Description}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjeDubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjEhhhNhNubjv)}(h **condition**h]h condition}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjEhhhNhNubjv)}(h **condition**h]h condition}(hhhj0EhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjEhhhNhNubjv)}(h**wq**h]hwq}(hhhjCEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh is woken up.}(h is woken up.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjeDubj6)}(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 }(hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but hj]EhhhNhNubjv)}(h **condition**h]h condition}(hhhjfEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]EubhO testing is done while lock is held and when this macro exits the lock is held.}(hO testing is done while lock is held and when this macro exits the lock is held.hj]EhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjeDubj6)}(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.}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM#hjeDubj6)}(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.}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM'hjeDubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjEhhhNhNubjv)}(h **condition**h]h condition}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh evaluated to true.}(h evaluated to true.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM*hjeDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-wait_event_interruptible_locked_irq (C macro)%c.wait_event_interruptible_locked_irqhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]h)}(hjEh]h#wait_event_interruptible_locked_irq}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMIubah}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjEhMIubah}(h]jEah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMHhjEhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMIubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jFj3jFj4uh1hhhhj$hNhNubj6)}(h7``wait_event_interruptible_locked_irq (wq, condition)``h]j<)}(hjFh]h3wait_event_interruptible_locked_irq (wq, condition)}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMJhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj3Fhj1FhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM2hj.Fubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjLFh]h Parameters}(hhhjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJFubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hjFFubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j<)}(hjkFh]hwq}(hhhjmFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hjeFubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhM3hjFubah}(h]h ]h"]h$]h&]uh1jhjeFubeh}(h]h ]h"]h$]h&]uh1jhjFhM3hjbFubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjFh]h condition}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM4hjFubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhM4hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM4hjbFubeh}(h]h ]h"]h$]h&]uh1jhjFFubj6)}(h**Description**h]jv)}(hjFh]h Description}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hjFFubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjFhhhNhNubjv)}(h **condition**h]h condition}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjFhhhNhNubjv)}(h **condition**h]h condition}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjFhhhNhNubjv)}(h**wq**h]hwq}(hhhj$GhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh is woken up.}(h is woken up.hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hjFFubj6)}(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 }(hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but hj>GhhhNhNubjv)}(h **condition**h]h condition}(hhhjGGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>GubhO testing is done while lock is held and when this macro exits the lock is held.}(hO testing is done while lock is held and when this macro exits the lock is held.hj>GhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM:hjFFubj6)}(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.}(hjcGhjaGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hjFFubj6)}(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.}(hjrGhjpGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMBhjFFubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjGhhhNhNubjv)}(h **condition**h]h condition}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh evaluated to true.}(h evaluated to true.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMEhjFFubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3wait_event_interruptible_exclusive_locked (C macro)+c.wait_event_interruptible_exclusive_lockedhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(hjGh]h)wait_event_interruptible_exclusive_locked}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhubah}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhjGhMhubah}(h]jGah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMghjGhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMhubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jGj3jGj4uh1hhhhj$hNhNubj6)}(h=``wait_event_interruptible_exclusive_locked (wq, condition)``h]j<)}(hjGh]h9wait_event_interruptible_exclusive_locked (wq, condition)}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMihj$hhubjR)}(hhh]j6)}(h-sleep exclusively until a condition gets trueh]h-sleep exclusively until a condition gets true}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMMhjHubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-Hh]h Parameters}(hhhj/HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+Hubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMQhj'Hubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j<)}(hjLHh]hwq}(hhhjNHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJHubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMNhjFHubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjgHhjeHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjaHhMNhjbHubah}(h]h ]h"]h$]h&]uh1jhjFHubeh}(h]h ]h"]h$]h&]uh1jhjaHhMNhjCHubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjHh]h condition}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMOhjHubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMOhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMOhjCHubeh}(h]h ]h"]h$]h&]uh1jhj'Hubj6)}(h**Description**h]jv)}(hjHh]h Description}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMQhj'Hubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjHhhhNhNubjv)}(h **condition**h]h condition}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjHhhhNhNubjv)}(h **condition**h]h condition}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjHhhhNhNubjv)}(h**wq**h]hwq}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh is woken up.}(h is woken up.hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMQhj'Hubj6)}(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 }(hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but hjIhhhNhNubjv)}(h **condition**h]h condition}(hhhj(IhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubhO testing is done while lock is held and when this macro exits the lock is held.}(hO testing is done while lock is held and when this macro exits the lock is held.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj'Hubj6)}(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.}(hjDIhjBIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj'Hubj6)}(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.}(hjSIhjQIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM]hj'Hubj6)}(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.}(hjbIhj`IhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMahj'Hubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjoIhhhNhNubjv)}(h **condition**h]h condition}(hhhjxIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoIubh evaluated to true.}(h evaluated to true.hjoIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMdhj'Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ7wait_event_interruptible_exclusive_locked_irq (C macro)/c.wait_event_interruptible_exclusive_locked_irqhNtauh1hhj$hhhNhNubh)}(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)}(hjIh]h-wait_event_interruptible_exclusive_locked_irq}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhjIhMubah}(h]jIah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjIhhhjIhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhj$hNhNubj6)}(hA``wait_event_interruptible_exclusive_locked_irq (wq, condition)``h]j<)}(hjIh]h=wait_event_interruptible_exclusive_locked_irq (wq, condition)}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMlhjIubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMphjJubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j<)}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj:Jubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMmhj6Jubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjWJhjUJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQJhMmhjRJubah}(h]h ]h"]h$]h&]uh1jhj6Jubeh}(h]h ]h"]h$]h&]uh1jhjQJhMmhj3Jubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjuJh]h condition}(hhhjwJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMnhjoJubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMnhjJubah}(h]h ]h"]h$]h&]uh1jhjoJubeh}(h]h ]h"]h$]h&]uh1jhjJhMnhj3Jubeh}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMphjJubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjJhhhNhNubjv)}(h **condition**h]h condition}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjJhhhNhNubjv)}(h **condition**h]h condition}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjJhhhNhNubjv)}(h**wq**h]hwq}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh is woken up.}(h is woken up.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMphjJubj6)}(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 }(hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but hjKhhhNhNubjv)}(h **condition**h]h condition}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubhO testing is done while lock is held and when this macro exits the lock is held.}(hO testing is done while lock is held and when this macro exits the lock is held.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjJubj6)}(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.}(hj4Khj2KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMxhjJubj6)}(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.}(hjCKhjAKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM|hjJubj6)}(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.}(hjRKhjPKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hj_KhhhNhNubjv)}(h **condition**h]h condition}(hhhjhKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_Kubh evaluated to true.}(h evaluated to true.hj_KhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_killable (C macro)c.wait_event_killablehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hjKh]hwait_event_killable}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjKhMubah}(h]jKah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjKhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjKhhhjKhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jKj3jKj4uh1hhhhj$hNhNubj6)}(h,``wait_event_killable (wq_head, condition)``h]j<)}(hjKh]h(wait_event_killable (wq_head, condition)}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjKubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj Lh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Lubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hj,Lh]hwq_head}(hhhj.LhhhNhNubah}(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.hhMhj&Lubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjGLhjELhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjALhMhjBLubah}(h]h ]h"]h$]h&]uh1jhj&Lubeh}(h]h ]h"]h$]h&]uh1jhjALhMhj#Lubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjeLh]h condition}(hhhjgLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj_Lubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjLhj~LhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzLhMhj{Lubah}(h]h ]h"]h$]h&]uh1jhj_Lubeh}(h]h ]h"]h$]h&]uh1jhjzLhMhj#Lubeh}(h]h ]h"]h$]h&]uh1jhjLubj6)}(h**Description**h]jv)}(hjLh]h Description}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLubj6)}(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 }(h6The process is put to sleep (TASK_KILLABLE) until the hjLhhhNhNubjv)}(h **condition**h]h condition}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjLhhhNhNubjv)}(h **condition**h]h condition}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjLhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh is woken up.}(h is woken up.hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLubj6)}(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.}(hjMhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLubj6)}(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 }(hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjMhhhNhNubjv)}(h **condition**h]h condition}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh evaluated to true.}(h evaluated to true.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_state (C macro)c.wait_event_statehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hjKMh]hwait_event_state}(hhhjUMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMMhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjIMhhhjhMhMubah}(h]jDMah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFMhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjFMhhhjhMhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhj$hNhNubj6)}(h0``wait_event_state (wq_head, condition, state)``h]j<)}(hjMh]h,wait_event_state (wq_head, condition, state)}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjMh]hwq_head}(hhhjMhhhNhNubah}(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.hhMhjMubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjNh]h condition}(hhhjNhhhNhNubah}(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.hhMhjNubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj/Nhj-NhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)NhMhj*Nubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhj)NhMhjMubj)}(h``state`` state to sleep in h](j)}(h ``state``h]j<)}(hjMNh]hstate}(hhhjONhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjGNubj)}(hhh]j6)}(hstate to sleep inh]hstate to sleep in}(hjhNhjfNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbNhMhjcNubah}(h]h ]h"]h$]h&]uh1jhjGNubeh}(h]h ]h"]h$]h&]uh1jhjbNhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjNh]h Description}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubj6)}(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 (}(hThe process is put to sleep (hjNhhhNhNubjv)}(h **state**h]hstate}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh ) until the }(h ) until the hjNhhhNhNubjv)}(h **condition**h]h condition}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh< evaluates to true or a signal is received (when allowed by }(h< evaluates to true or a signal is received (when allowed by hjNhhhNhNubjv)}(h **state**h]hstate}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh). The }(h). The hjNhhhNhNubjv)}(h **condition**h]h condition}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjNhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh is woken up.}(h is woken up.hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubj6)}(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.}(hjOhj OhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubj6)}(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 }(hYThe function will return -ERESTARTSYS if it was interrupted by a signal (when allowed by hjOhhhNhNubjv)}(h **state**h]hstate}(hhhj%OhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh ) and 0 if }(h ) and 0 if hjOhhhNhNubjv)}(h **condition**h]h condition}(hhhj8OhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh evaluated to true.}(h evaluated to true.hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%wait_event_killable_timeout (C macro)c.wait_event_killable_timeouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hjlOh]hwait_event_killable_timeout}(hhhjvOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrOubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnOhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjjOhhhjOhMubah}(h]jeOah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjgOhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjgOhhhjOhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhj$hNhNubj6)}(h=``wait_event_killable_timeout (wq_head, condition, timeout)``h]j<)}(hjOh]h9wait_event_killable_timeout (wq_head, condition, timeout)}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(hXP**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](j6)}(h**Parameters**h]jv)}(hjOh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjOh]hwq_head}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj)}(hhh]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hj5Ph]h condition}(hhhj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3Pubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj/Pubj)}(hhh]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjPPhjNPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJPhMhjKPubah}(h]h ]h"]h$]h&]uh1jhj/Pubeh}(h]h ]h"]h$]h&]uh1jhjJPhMhjOubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j<)}(hjnPh]htimeout}(hhhjpPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlPubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhPubj)}(hhh]j6)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjhPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjPh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj6)}(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 }(h6The process is put to sleep (TASK_KILLABLE) until the hjPhhhNhNubjv)}(h **condition**h]h condition}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh5 evaluates to true or a kill signal is received. The }(h5 evaluates to true or a kill signal is received. The hjPhhhNhNubjv)}(h **condition**h]h condition}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjPhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh is woken up.}(h is woken up.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj6)}(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 QhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj6)}(h)Only kill signals interrupt this process.h]h)Only kill signals interrupt this process.}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj6)}(h **Return**h]jv)}(hj(Qh]hReturn}(hhhj*QhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&Qubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj6)}(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 }(h 0 if the hj>QhhhNhNubjv)}(h **condition**h]h condition}(hhhjGQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh evaluated to }(h evaluated to hj>QhhhNhNubj<)}(h ``false``h]hfalse}(hhhjZQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>Qubh after the }(h after the hj>QhhhNhNubjv)}(h **timeout**h]htimeout}(hhhjmQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh elapsed, 1 if the }(h elapsed, 1 if the hj>QhhhNhNubjv)}(h **condition**h]h condition}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh evaluated to }(hjYQhj>Qubj<)}(h``true``h]htrue}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>Qubh after the }(hjlQhj>Qubjv)}(h **timeout**h]htimeout}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh4 elapsed, the remaining jiffies (at least 1) if the }(h4 elapsed, the remaining jiffies (at least 1) if the hj>QhhhNhNubjv)}(h **condition**h]h condition}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh evaluated to }(h evaluated to hj>QhhhNhNubj<)}(h``true``h]htrue}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>Qubh before the }(h before the hj>QhhhNhNubjv)}(h **timeout**h]htimeout}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Qubh elapsed, or -}(h elapsed, or -hj>QhhhNhNubj<)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>Qubh( if it was interrupted by a kill signal.}(h( if it was interrupted by a kill signal.hj>QhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!wait_event_lock_irq_cmd (C macro)c.wait_event_lock_irq_cmdhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hj$Rh]hwait_event_lock_irq_cmd}(hhhj.RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*Rubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&RhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj"RhhhjARhMubah}(h]jRah ](jjeh"]h$]h&]juh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjRhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjRhhhjARhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j[Rj3j[Rj4uh1hhhhj$hNhNubj6)}(h;``wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)``h]j<)}(hjaRh]h7wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)}(hhhjcRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj_Rubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$hhubjR)}(hhh]j6)}(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.}(hj|RhjzRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjwRubah}(h]h ]h"]h$]h&]uh1jQhj$hhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjRh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjRubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j<)}(hjRh]hwq_head}(hhhjRhhhNhNubah}(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]j6)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j<)}(hjRh]h condition}(hhhjRhhhNhNubah}(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]j6)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjShMhjRubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]j<)}(hj&Sh]hlock}(hhhj(ShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$Subah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj Subj)}(hhh]j6)}(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.}(hjAShj?ShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjWubj)}(hhh]j6)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hj_Whj]WhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hjZWubah}(h]h ]h"]h$]h&]uh1jhj>Wubeh}(h]h ]h"]h$]h&]uh1jhjYWhM9hjVubeh}(h]h ]h"]h$]h&]uh1jhjsVubj6)}(h**Description**h]jv)}(hjWh]h Description}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~Wubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hjsVubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjWhhhNhNubjv)}(h **condition**h]h condition}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh0 evaluates to true or a signal is received. The }(h0 evaluates to true or a signal is received. The hjWhhhNhNubjv)}(h **condition**h]h condition}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjWhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh is woken up.}(h is woken up.hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hjsVubj6)}(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.}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hjsVubj6)}(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.}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMBhjsVubj6)}(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 }(hNThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjWhhhNhNubjv)}(h **condition**h]h condition}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh evaluated to true.}(h evaluated to true.hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMFhjsVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+wait_event_interruptible_lock_irq (C macro)#c.wait_event_interruptible_lock_irqhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(hj:Xh]h!wait_event_interruptible_lock_irq}(hhhjDXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Xubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj:Yubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj6Yubj)}(hhh]j6)}(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.}(hjWYhjUYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhjRYubah}(h]h ]h"]h$]h&]uh1jhj6Yubeh}(h]h ]h"]h$]h&]uh1jhjQYhMYhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hjxYh]h Description}(hhhjzYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvYubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hjXubj6)}(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 }(h;The process is put to sleep (TASK_INTERRUPTIBLE) until the hjYhhhNhNubjv)}(h **condition**h]h condition}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh. evaluates to true or signal is received. The }(h. evaluates to true or signal is received. The hjYhhhNhNubjv)}(h **condition**h]h condition}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh$ is checked each time the waitqueue }(h$ is checked each time the waitqueue hjYhhhNhNubjv)}(h **wq_head**h]hwq_head}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh is woken up.}(h is woken up.hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hjXubj6)}(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.}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM_hjXubj6)}(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.}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhjXubj6)}(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 }(hNThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if hjYhhhNhNubjv)}(h **condition**h]h condition}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh evaluated to true.}(h evaluated to true.hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMehjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3wait_event_interruptible_lock_irq_timeout (C macro)+c.wait_event_interruptible_lock_irq_timeouthNtauh1hhj$hhhNhNubh)}(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)}(hj2Zh]h)wait_event_interruptible_lock_irq_timeout}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubj$)}(h!struct wait_queue_entry *wq_entryh](j')}(hj*h]hstruct}(hhhjWehhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjSeubj9)}(h h]h }(hhhjdehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSeubh)}(hhh]h)}(hwait_queue_entryh]hwait_queue_entry}(hhhjuehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjreubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjwemodnameN classnameNjajd)}jg]je c.finish_waitasbuh1hhjSeubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSeubj~)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjSeubh)}(hwq_entryh]hwq_entry}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubeh}(h]h ]h"]h$]h&]jj uh1jhjdhhhjdhM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhM]ubah}(h]jdah ](jjeh"]h$]h&]juh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMdhjdhhubj)}(hhh]j6)}(h!clean up after waiting in a queueh]h!clean up after waiting in a queue}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM\hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM]ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhj$hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM`hjeubj)}(hhh](j)}(h8``struct wait_queue_head *wq_head`` waitqueue waited on h](j)}(h#``struct wait_queue_head *wq_head``h]j<)}(hjfh]hstruct wait_queue_head *wq_head}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjfubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM]hjfubj)}(hhh]j6)}(hwaitqueue waited onh]hwaitqueue waited on}(hj5fhj3fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/fhM]hj0fubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhj/fhM]hjfubj)}(h6``struct wait_queue_entry *wq_entry`` wait descriptor h](j)}(h%``struct wait_queue_entry *wq_entry``h]j<)}(hjSfh]h!struct wait_queue_entry *wq_entry}(hhhjUfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjQfubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM^hjMfubj)}(hhh]j6)}(hwait descriptorh]hwait descriptor}(hjnfhjlfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhfhM^hjifubah}(h]h ]h"]h$]h&]uh1jhjMfubeh}(h]h ]h"]h$]h&]uh1jhjhfhM^hjfubeh}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM`hjeubj6)}(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.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chM`hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj$hhhNhNubeh}(h]wait-queues-and-wake-eventsah ]h"]wait queues and wake eventsah$]h&]uh1hhhhhhhhK=ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhhhhKFubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_task_stopped (C function)c.wait_task_stoppedhNtauh1hhjfhhhNhNubh)}(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}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfhhhjfhMubh)}(hwait_task_stoppedh]h)}(hwait_task_stoppedh]hwait_task_stopped}(hhhj ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj gubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjfhMubj)}(h9(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j$)}(hstruct wait_opts *woh](j')}(hj*h]hstruct}(hhhj)ghhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj%gubj9)}(h h]h }(hhhj6ghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%gubh)}(hhh]h)}(h wait_optsh]h wait_opts}(hhhjGghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDgubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjIgmodnameN classnameNjajd)}jg]jj)}j]jgsbc.wait_task_stoppedasbuh1hhj%gubj9)}(h h]h }(hhhjgghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%gubj~)}(hjh]h*}(hhhjughhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj%gubh)}(hwoh]hwo}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%gubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj!gubj$)}(h int ptraceh](j)}(hinth]hint}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubh)}(hptraceh]hptrace}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj!gubj$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhjghhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjgubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgmodnameN classnameNjajd)}jg]jcgc.wait_task_stoppedasbuh1hhjgubj9)}(h h]h }(hhhj hhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubj~)}(hjh]h*}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubh)}(hjh]hp}(hhhj'hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj!gubeh}(h]h ]h"]h$]h&]jj uh1jhjfhhhjfhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhjfhMubah}(h]jfah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjfhhubj)}(hhh]j6)}(h,Wait for ``TASK_STOPPED`` or ``TASK_TRACED``h](h Wait for }(h Wait for hjQhhhhNhNubj<)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hhhjZhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjQhubh or }(h or hjQhhhhNhNubj<)}(h``TASK_TRACED``h]h TASK_TRACED}(hhhjmhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjQhubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjNhhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjhubj)}(hhh](j)}(h&``struct wait_opts *wo`` wait options h](j)}(h``struct wait_opts *wo``h]j<)}(hjhh]hstruct wait_opts *wo}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjhubj)}(hhh]j6)}(h wait optionsh]h wait options}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h&``int ptrace`` is the wait for ptrace h](j)}(h``int ptrace``h]j<)}(hjhh]h int ptrace}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjhubj)}(hhh]j6)}(his the wait for ptraceh]his the wait for ptrace}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubj)}(h+``struct task_struct *p`` task to wait for h](j)}(h``struct task_struct *p``h]j<)}(hj&ih]hstruct task_struct *p}(hhhj(ihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$iubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhj iubj)}(hhh]j6)}(htask to wait forh]htask to wait for}(hjAihj?ihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;ihMhjsighand->siglock**.h](h read_lock(}(h read_lock(hjihhhNhNubh)}(h:c:type:`tasklist_lock`h]j<)}(hjih]h tasklist_lock}(hhhjihhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj tasklist_lockuh1hhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjiubhL), which is released if return value is non-zero. Also, grabs and releases }(hL), which is released if return value is non-zero. Also, grabs and releases hjihhhNhNubjv)}(h**p->sighand->siglock**h]hp->sighand->siglock}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh.}(hjPhjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjihMhjhubj6)}(h **Return**h]jv)}(hjjh]hReturn}(hhhj!jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjhubj6)}(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 }(h0 if wait condition didn't exist and search for other wait conditions should continue. Non-zero return, -errno on failure and hj5jhhhNhNubjv)}(h**p**h]hp}(hhhj>jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5jubhg’s pid on success, implies that tasklist_lock is released and wait condition search should terminate.}(he's pid on success, implies that tasklist_lock is released and wait condition search should terminate.hj5jhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$task_set_jobctl_pending (C function)c.task_set_jobctl_pendinghNtauh1hhjfhhhNhNubh)}(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}(hhhjxjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtjhhhjjhMubh)}(htask_set_jobctl_pendingh]h)}(htask_set_jobctl_pendingh]htask_set_jobctl_pending}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjtjhhhjjhMubj)}(h.(struct task_struct *task, unsigned long mask)h](j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhjjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjjubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjjmodnameN classnameNjajd)}jg]jj)}j]jjsbc.task_set_jobctl_pendingasbuh1hhjjubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(htaskh]htask}(hhhj khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hhhj&khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"kubj9)}(h h]h }(hhhj4khhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"kubj)}(hlongh]hlong}(hhhjBkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"kubj9)}(h h]h }(hhhjPkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"kubh)}(hmaskh]hmask}(hhhj^khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"kubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubeh}(h]h ]h"]h$]h&]jj uh1jhjtjhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjpjhhhjjhMubah}(h]jkjah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjmjhhubj)}(hhh]j6)}(hset jobctl pending bitsh]hset jobctl pending bits}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjmjhhhjjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhjfhNhNubjl)}(hXL**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](j6)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjkubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j<)}(hjkh]hstruct task_struct *task}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj)}(hhh]j6)}(h target taskh]h target task}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(h+``unsigned long mask`` pending bits to set h](j)}(h``unsigned long mask``h]j<)}(hjlh]hunsigned long mask}(hhhjlhhhNhNubah}(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.chMhjkubj)}(hhh]j6)}(hpending bits to seth]hpending bits to set}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubj6)}(h**Description**h]jv)}(hj>lh]h Description}(hhhj@lhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjobctl**. **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 }(hClear hjTlhhhNhNubjv)}(h**mask**h]hmask}(hhhj]lhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTlubh from }(h from hjTlhhhNhNubjv)}(h**task->jobctl**h]h task->jobctl}(hhhjplhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTlubh. }(h. hjTlhhhNhNubjv)}(h**mask**h]hmask}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTlubh must be subset of }(h must be subset of hjTlhhhNhNubj<)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTlubh | }(h | hjTlhhhNhNubj<)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTlubh | }(hjlhjTlubj<)}(h``JOBCTL_STOP_SIGMASK``h]hJOBCTL_STOP_SIGMASK}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTlubh | }(h | hjTlhhhNhNubj<)}(h``JOBCTL_TRAPPING``h]hJOBCTL_TRAPPING}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTlubhB. If stop signo is being set, the existing signo is cleared. If }(hB. If stop signo is being set, the existing signo is cleared. If hjTlhhhNhNubjv)}(h**task**h]htask}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTlubh@ is already being killed or exiting, this function becomes noop.}(h@ is already being killed or exiting, this function becomes noop.hjTlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjkubj6)}(h **Context**h]jv)}(hjlh]hContext}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj6)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hMust be called with hjmhhhNhNubjv)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh held.}(h held.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj6)}(h **Return**h]jv)}(hj8mh]hReturn}(hhhj:mhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6mubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj6)}(hO``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](j<)}(h``true``h]htrue}(hhhjRmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNmubh if }(h if hjNmhhhNhNubjv)}(h**mask**h]hmask}(hhhjemhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNmubh is set, }(h is set, hjNmhhhNhNubj<)}(h ``false``h]hfalse}(hhhjxmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNmubh if made noop because }(h if made noop because hjNmhhhNhNubjv)}(h**task**h]htask}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNmubh was dying.}(h was dying.hjNmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'task_clear_jobctl_trapping (C function)c.task_clear_jobctl_trappinghNtauh1hhjfhhhNhNubh)}(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}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM'ubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjmhhhjmhM'ubh)}(htask_clear_jobctl_trappingh]h)}(htask_clear_jobctl_trappingh]htask_clear_jobctl_trapping}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhjmhM'ubj)}(h(struct task_struct *task)h]j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhjnhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjmubj9)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjmubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj"nmodnameN classnameNjajd)}jg]jj)}j]jmsbc.task_clear_jobctl_trappingasbuh1hhjmubj9)}(h h]h }(hhhj@nhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjmubj~)}(hjh]h*}(hhhjNnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjmubh)}(htaskh]htask}(hhhj[nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjmubah}(h]h ]h"]h$]h&]jj uh1jhjmhhhjmhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjmhM'ubah}(h]jmah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjmhhubj)}(hhh]j6)}(hclear jobctl trapping bith]hclear jobctl trapping bit}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]j1j,j2jnj3jnj4uh1hhhhjfhNhNubjl)}(hXt**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](j6)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM*hjnubj)}(hhh]j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j<)}(hjnh]hstruct task_struct *task}(hhhjnhhhNhNubah}(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]j6)}(h target taskh]h target task}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjnhM'hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM'hjnubah}(h]h ]h"]h$]h&]uh1jhjnubj6)}(h**Description**h]jv)}(hjoh]h Description}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)hjnubj6)}(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. }(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. hjohhhNhNubjv)}(h**task->siglock**h]h task->siglock}(hhhj!ohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubh guarantees that }(h guarantees that hjohhhNhNubjv)}(h**task->parent**h]h task->parent}(hhhj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubh points to the ptracer.}(h points to the ptracer.hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)hjnubj6)}(h **Context**h]jv)}(hjPoh]hContext}(hhhjRohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNoubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM.hjnubj6)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hMust be called with hjfohhhNhNubjv)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hhhjoohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfoubh held.}(h held.hjfohhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM0hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&task_clear_jobctl_pending (C function)c.task_clear_jobctl_pendinghNtauh1hhjfhhhNhNubh)}(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}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM<ubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjohhhjohM<ubh)}(htask_clear_jobctl_pendingh]h)}(htask_clear_jobctl_pendingh]htask_clear_jobctl_pending}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjohM<ubj)}(h.(struct task_struct *task, unsigned long mask)h](j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhjohhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjoubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjpmodnameN classnameNjajd)}jg]jj)}j]josbc.task_clear_jobctl_pendingasbuh1hhjoubj9)}(h h]h }(hhhj$phhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubj~)}(hjh]h*}(hhhj2phhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjoubh)}(htaskh]htask}(hhhj?phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubj$)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hhhjXphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTpubj9)}(h h]h }(hhhjfphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTpubj)}(hlongh]hlong}(hhhjtphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTpubj9)}(h h]h }(hhhjphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTpubh)}(hmaskh]hmask}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTpubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubeh}(h]h ]h"]h$]h&]jj uh1jhjohhhjohM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjohM<ubah}(h]joah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMIhjohhubj)}(hhh]j6)}(hclear jobctl pending bitsh]hclear jobctl pending bits}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM;hjphhubah}(h]h ]h"]h$]h&]uh1jhjohhhjohM<ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjph]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjpubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j<)}(hjph]hstruct task_struct *task}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM<hjpubj)}(hhh]j6)}(h target taskh]h target task}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhM<hjqubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjqhM<hjpubj)}(h-``unsigned long mask`` pending bits to clear h](j)}(h``unsigned long mask``h]j<)}(hj5qh]hunsigned long mask}(hhhj7qhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3qubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM=hj/qubj)}(hhh]j6)}(hpending bits to clearh]hpending bits to clear}(hjPqhjNqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJqhM=hjKqubah}(h]h ]h"]h$]h&]uh1jhj/qubeh}(h]h ]h"]h$]h&]uh1jhjJqhM=hjpubeh}(h]h ]h"]h$]h&]uh1jhjpubj6)}(h**Description**h]jv)}(hjpqh]h Description}(hhhjrqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnqubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjpubj6)}(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 }(hClear hjqhhhNhNubjv)}(h**mask**h]hmask}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubh from }(h from hjqhhhNhNubjv)}(h**task->jobctl**h]h task->jobctl}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubh. }(h. hjqhhhNhNubjv)}(h**mask**h]hmask}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubh must be subset of }(h must be subset of hjqhhhNhNubj<)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubh. If }(h. If hjqhhhNhNubj<)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubh8 is being cleared, other STOP bits are cleared together.}(h8 is being cleared, other STOP bits are cleared together.hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjpubj6)}(hiIf clearing of **mask** leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().h](hIf clearing of }(hIf clearing of hjqhhhNhNubjv)}(h**mask**h]hmask}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubhR leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().}(hR leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMChjpubj6)}(h **Context**h]jv)}(hjrh]hContext}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMFhjpubj6)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hMust be called with hj0rhhhNhNubjv)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hhhj9rhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0rubh held.}(h held.hj0rhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(task_participate_group_stop (C function)c.task_participate_group_stophNtauh1hhjfhhhNhNubh)}(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}(hhhjsrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjorhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMXubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjorhhhjrhMXubh)}(htask_participate_group_stoph]h)}(htask_participate_group_stoph]htask_participate_group_stop}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjorhhhjrhMXubj)}(h(struct task_struct *task)h]j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhjrhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjrubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjrmodnameN classnameNjajd)}jg]jj)}j]jrsbc.task_participate_group_stopasbuh1hhjrubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubj~)}(hjh]h*}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjrubh)}(htaskh]htask}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubah}(h]h ]h"]h$]h&]jj uh1jhjorhhhjrhMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkrhhhjrhMXubah}(h]jfrah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMfhjhrhhubj)}(hhh]j6)}(hparticipate in a group stoph]hparticipate in a group stop}(hj5shj3shhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMWhj0shhubah}(h]h ]h"]h$]h&]uh1jhjhrhhhjrhMXubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jKsj3jKsj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUsh]h Parameters}(hhhjWshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSsubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[hjOsubj)}(hhh]j)}(h@``struct task_struct *task`` task participating in a group stop h](j)}(h``struct task_struct *task``h]j<)}(hjtsh]hstruct task_struct *task}(hhhjvshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrsubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMXhjnsubj)}(hhh]j6)}(h"task participating in a group stoph]h"task participating in a group stop}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMXhjsubah}(h]h ]h"]h$]h&]uh1jhjnsubeh}(h]h ]h"]h$]h&]uh1jhjshMXhjksubah}(h]h ]h"]h$]h&]uh1jhjOsubj6)}(h**Description**h]jv)}(hjsh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZhjOsubj6)}(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](jv)}(h**task**h]htask}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh has }(h has hjshhhNhNubj<)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubhq set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if }(hq set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if hjshhhNhNubj<)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubhH was set. If the consumption completes the group stop, the appropriate }(hH was set. If the consumption completes the group stop, the appropriate hjshhhNhNubhtitle_reference)}(h `SIGNAL_*`h]hSIGNAL_*}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1jthjsubh flags are set.}(h flags are set.hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZhjOsubj6)}(h **Context**h]jv)}(hj th]hContext}(hhhj"thhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_hjOsubj6)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hMust be called with hj6thhhNhNubjv)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hhhj?thhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6tubh held.}(h held.hj6thhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMahjOsubj6)}(h **Return**h]jv)}(hj[th]hReturn}(hhhj]thhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYtubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMchjOsubj6)}(hX``true`` if group stop completion should be notified to the parent, ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjuthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqtubh< if group stop completion should be notified to the parent, }(h< if group stop completion should be notified to the parent, hjqthhhNhNubj<)}(h ``false``h]hfalse}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqtubh otherwise.}(h otherwise.hjqthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMdhjOsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌptrace_trap_notify (C function)c.ptrace_trap_notifyhNtauh1hhjfhhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMeubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjthMeubh)}(hptrace_trap_notifyh]h)}(hptrace_trap_notifyh]hptrace_trap_notify}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjthMeubj)}(h(struct task_struct *t)h]j$)}(hstruct task_struct *th](j')}(hj*h]hstruct}(hhhjthhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjtubj9)}(h h]h }(hhhj uhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjumodnameN classnameNjajd)}jg]jj)}j]jtsbc.ptrace_trap_notifyasbuh1hhjtubj9)}(h h]h }(hhhj=uhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubj~)}(hjh]h*}(hhhjKuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjtubh)}(hth]ht}(hhhjXuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjtubah}(h]h ]h"]h$]h&]jj uh1jhjthhhjthMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjthMeubah}(h]jtah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMthjthhubj)}(hhh]j6)}(hschedule trap to notify ptracerh]hschedule trap to notify ptracer}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMdhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhjfhNhNubjl)}(hXp**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](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhhjuubj)}(hhh]j)}(h:``struct task_struct *t`` tracee wanting to notify tracer h](j)}(h``struct task_struct *t``h]j<)}(hjuh]hstruct task_struct *t}(hhhjuhhhNhNubah}(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.chMehjuubj)}(hhh]j6)}(htracee wanting to notify tracerh]htracee wanting to notify tracer}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMehjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMehjuubah}(h]h ]h"]h$]h&]uh1jhjuubj6)}(h**Description**h]jv)}(hjuh]h Description}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMghjuubj6)}(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. }(hrThis function schedules sticky ptrace trap which is cleared on the next TRAP_STOP to notify ptracer of an event. hjvhhhNhNubjv)}(h**t**h]ht}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh" must have been seized by ptracer.}(h" must have been seized by ptracer.hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMghjuubj6)}(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 }(hIf hj8vhhhNhNubjv)}(h**t**h]ht}(hhhjAvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8vubhX* 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.}(hX* 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.hj8vhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMkhjuubj6)}(h **Context**h]jv)}(hj]vh]hContext}(hhhj_vhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[vubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMqhjuubj6)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hMust be called with hjsvhhhNhNubjv)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hhhj|vhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsvubh held.}(h held.hjsvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMshjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌforce_sig_seccomp (C function)c.force_sig_seccomphNtauh1hhjfhhhNhNubh)}(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}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-ubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvhhhjvhM-ubh)}(hforce_sig_seccomph]h)}(hforce_sig_seccomph]hforce_sig_seccomp}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjvhM-ubj)}(h.(int syscall, int reason, bool force_coredump)h](j$)}(h int syscallh](j)}(hinth]hint}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubh)}(hsyscallh]hsyscall}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubj$)}(h int reasonh](j)}(hinth]hint}(hhhj(whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$wubj9)}(h h]h }(hhhj6whhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$wubh)}(hreasonh]hreason}(hhhjDwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$wubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubj$)}(hbool force_coredumph](j)}(hjh]hbool}(hhhj]whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYwubj9)}(h h]h }(hhhjjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYwubh)}(hforce_coredumph]hforce_coredump}(hhhjxwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYwubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubeh}(h]h ]h"]h$]h&]jj uh1jhjvhhhjvhM-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjvhM-ubah}(h]jvah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM3hjvhhubj)}(hhh]j6)}(h6signals the task to allow in-process syscall emulationh]h6signals the task to allow in-process syscall emulation}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM,hjwhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjvhM-ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM0hjwubj)}(hhh](j)}(h3``int syscall`` syscall number to send to userland h](j)}(h``int syscall``h]j<)}(hjwh]h int syscall}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-hjwubj)}(hhh]j6)}(h"syscall number to send to userlandh]h"syscall number to send to userland}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhM-hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM-hjwubj)}(hN``int reason`` filter-supplied reason code to send to userland (via si_errno) h](j)}(h``int reason``h]j<)}(hjxh]h int reason}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM.hjxubj)}(hhh]j6)}(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)}(hj8xhj6xhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2xhM.hj3xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj2xhM.hjwubj)}(h3``bool force_coredump`` true to trigger a coredump h](j)}(h``bool force_coredump``h]j<)}(hjVxh]hbool force_coredump}(hhhjXxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM/hjPxubj)}(hhh]j6)}(htrue to trigger a coredumph]htrue to trigger a coredump}(hjqxhjoxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkxhM/hjlxubah}(h]h ]h"]h$]h&]uh1jhjPxubeh}(h]h ]h"]h$]h&]uh1jhjkxhM/hjwubeh}(h]h ]h"]h$]h&]uh1jhjwubj6)}(h**Description**h]jv)}(hjxh]h Description}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjwubj6)}(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.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%do_notify_parent_cldstop (C function)c.do_notify_parent_cldstophNtauh1hhjfhhhNhNubh)}(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}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMfubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjxhMfubh)}(hdo_notify_parent_cldstoph]h)}(hdo_notify_parent_cldstoph]hdo_notify_parent_cldstop}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjxhMfubj)}(h4(struct task_struct *tsk, bool for_ptracer, int why)h](j$)}(hstruct task_struct *tskh](j')}(hj*h]hstruct}(hhhjyhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjyubj9)}(h h]h }(hhhj yhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj1yhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.yubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj3ymodnameN classnameNjajd)}jg]jj)}j]jxsbc.do_notify_parent_cldstopasbuh1hhjyubj9)}(h h]h }(hhhjQyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubj~)}(hjh]h*}(hhhj_yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyubh)}(htskh]htsk}(hhhjlyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj yubj$)}(hbool for_ptracerh](j)}(hjh]hbool}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubh)}(h for_ptracerh]h for_ptracer}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj yubj$)}(hint whyh](j)}(hinth]hint}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubh)}(hwhyh]hwhy}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj yubeh}(h]h ]h"]h$]h&]jj uh1jhjxhhhjxhMfubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjxhMfubah}(h]jxah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMqhjxhhubj)}(hhh]j6)}(h/notify parent of stopped/continued state changeh]h/notify parent of stopped/continued state change}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMehjyhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMfubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj"zh]h Parameters}(hhhj$zhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj zubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMihjzubj)}(hhh](j)}(h<``struct task_struct *tsk`` task reporting the state change h](j)}(h``struct task_struct *tsk``h]j<)}(hjAzh]hstruct task_struct *tsk}(hhhjCzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj?zubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMfhj;zubj)}(hhh]j6)}(htask reporting the state changeh]htask reporting the state change}(hj\zhjZzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVzhMfhjWzubah}(h]h ]h"]h$]h&]uh1jhj;zubeh}(h]h ]h"]h$]h&]uh1jhjVzhMfhj8zubj)}(h5``bool for_ptracer`` the notification is for ptracer h](j)}(h``bool for_ptracer``h]j<)}(hjzzh]hbool for_ptracer}(hhhj|zhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMghjtzubj)}(hhh]j6)}(hthe notification is for ptracerh]hthe notification is for ptracer}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMghjzubah}(h]h ]h"]h$]h&]uh1jhjtzubeh}(h]h ]h"]h$]h&]uh1jhjzhMghj8zubj)}(h6``int why`` CLD_{CONTINUED|STOPPED|TRAPPED} to report h](j)}(h ``int why``h]j<)}(hjzh]hint why}(hhhjzhhhNhNubah}(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.chMhhjzubj)}(hhh]j6)}(h)CLD_{CONTINUED|STOPPED|TRAPPED} to reporth]h)CLD_{CONTINUED|STOPPED|TRAPPED} to report}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMhhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhhj8zubeh}(h]h ]h"]h$]h&]uh1jhjzubj6)}(h**Description**h]jv)}(hjzh]h Description}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMjhjzubj6)}(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 }(hNotify hj{hhhNhNubjv)}(h**tsk**h]htsk}(hhhj {hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh>’s parent that the stopped/continued state has changed. If }(h<'s parent that the stopped/continued state has changed. If hj{hhhNhNubjv)}(h**for_ptracer**h]h for_ptracer}(hhhj {hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh is }(h is hj{hhhNhNubj<)}(h ``false``h]hfalse}(hhhj3{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{ubh, }(h, hj{hhhNhNubjv)}(h**tsk**h]htsk}(hhhjF{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh2’s group leader notifies to its real parent. If }(h0's group leader notifies to its real parent. If hj{hhhNhNubj<)}(h``true``h]htrue}(hhhjY{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{ubh, }(hjE{hj{ubjv)}(h**tsk**h]htsk}(hhhjk{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh reports to }(h reports to hj{hhhNhNubjv)}(h**tsk->parent**h]h tsk->parent}(hhhj~{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh which should be the ptracer.}(h which should be the ptracer.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMjhjzubj6)}(h **Context**h]jv)}(hj{h]hContext}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMnhjzubj6)}(h7Must be called with tasklist_lock at least read locked.h]h7Must be called with tasklist_lock at least read locked.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMphjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_signal_stop (C function)c.do_signal_stophNtauh1hhjfhhhNhNubh)}(hhh](h)}(hbool do_signal_stop (int signr)h]h)}(hbool do_signal_stop(int signr)h](j)}(hjh]hbool}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMl ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{hhhj{hMl ubh)}(hdo_signal_stoph]h)}(hdo_signal_stoph]hdo_signal_stop}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhj{hMl ubj)}(h (int signr)h]j$)}(h int signrh](j)}(hinth]hint}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(h h]h }(hhhj)|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubh)}(hsignrh]hsignr}(hhhj7|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{hMl ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj{hMl ubah}(h]j{ah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj{hhubj)}(hhh]j6)}(h4handle group stop for SIGSTOP and other stop signalsh]h4handle group stop for SIGSTOP and other stop signals}(hjd|hjb|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMk hj_|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hMl ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jz|j3jz|j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj~|ubj)}(hhh]j)}(h5``int signr`` signr causing group stop if initiating h](j)}(h ``int signr``h]j<)}(hj|h]h int signr}(hhhj|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.chMl hj|ubj)}(hhh]j6)}(h&signr causing group stop if initiatingh]h&signr causing group stop if initiating}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMl hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMl hj|ubah}(h]h ]h"]h$]h&]uh1jhj~|ubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMn hj~|ubj6)}(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 }(hIf hj|hhhNhNubj<)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh* is not set yet, initiate group stop with }(h* is not set yet, initiate group stop with hj|hhhNhNubjv)}(h **signr**h]hsignr}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), }(h and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), hj|hhhNhNubj<)}(h``true``h]htrue}(hhhj#}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh# is returned with siglock released.}(h# is returned with siglock released.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMn hj~|ubj6)}(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, }(h@If ptraced, this function doesn't handle stop itself. Instead, hj=}hhhNhNubj<)}(h``JOBCTL_TRAP_STOP``h]hJOBCTL_TRAP_STOP}(hhhjF}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj=}ubh is scheduled and }(h is scheduled and hj=}hhhNhNubj<)}(h ``false``h]hfalse}(hhhjY}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj=}ubhr is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.}(hr is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.hj=}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMs hj~|ubj6)}(h **Context**h]jv)}(hju}h]hContext}(hhhjw}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjs}ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMx hj~|ubj6)}(h]Must be called with **current->sighand->siglock** held, which is released on ``true`` return.h](hMust be called with }(hMust be called with hj}hhhNhNubjv)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh held, which is released on }(h held, which is released on hj}hhhNhNubj<)}(h``true``h]htrue}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubh return.}(h return.hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMz hj~|ubj6)}(h **Return**h]jv)}(hj}h]hReturn}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM} hj~|ubj6)}(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}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubhA if group stop is already cancelled or ptrace trap is scheduled. }(hA if group stop is already cancelled or ptrace trap is scheduled. hj}hhhNhNubj<)}(h``true``h]htrue}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubh if participated in group stop.}(h if participated in group stop.hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM~ hj~|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_jobctl_trap (C function)c.do_jobctl_traphNtauh1hhjfhhhNhNubh)}(hhh](h)}(hvoid do_jobctl_trap (void)h]h)}(hvoid do_jobctl_trap(void)h](j)}(hvoidh]hvoid}(hhhj*~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&~hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhj9~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&~hhhj8~hM ubh)}(hdo_jobctl_traph]h)}(hdo_jobctl_traph]hdo_jobctl_trap}(hhhjK~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&~hhhj8~hM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjg~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc~ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hj_~ubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~hhubj)}(hhh]j6)}(h take care of ptrace jobctl trapsh]h take care of ptrace jobctl traps}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~hhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj8~hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj~h]hvoid}(hhhj~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]j6)}(h no argumentsh]h no arguments}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~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~ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj6)}(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, }(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, hj$hhhNhNubj<)}(h ``SIGTRAP``h]hSIGTRAP}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$ubh.}(hjPhj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj6)}(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.}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj6)}(h **Context**h]jv)}(hjWh]hContext}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj6)}(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 }(hMust be called with hjmhhhNhNubjv)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubhU held, which may be released and re-acquired before returning with intervening sleep.}(hU held, which may be released and re-acquired before returning with intervening sleep.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_freezer_trap (C function)c.do_freezer_traphNtauh1hhjfhhhNhNubh)}(hhh](h)}(hvoid do_freezer_trap (void)h]h)}(hvoid do_freezer_trap(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hdo_freezer_traph]h)}(hdo_freezer_traph]hdo_freezer_trap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhhubj)}(hhh]j6)}(hhandle the freezer jobctl traph]hhandle the freezer jobctl trap}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]j1j,j2j0j3j0j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj:h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj4ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjYh]hvoid}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjWubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjSubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjnhM hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj4ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj4ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj4ubj6)}(hbMust be called with **current->sighand->siglock** held, which is always released before returning.h](hMust be called with }(hMust be called with hjрhhhNhNubjv)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hhhjڀhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjрubh1 held, which is always released before returning.}(h1 held, which is always released before returning.hjрhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsignal_delivered (C function)c.signal_deliveredhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMl ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj"hMl ubh)}(hsignal_deliveredh]h)}(hsignal_deliveredh]hsignal_delivered}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hMl ubj)}(h$(struct ksignal *ksig, int stepping)h](j$)}(hstruct ksignal *ksigh](j')}(hj*h]hstruct}(hhhjQhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjMubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubh)}(hhh]h)}(hksignalh]hksignal}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqmodnameN classnameNjajd)}jg]jj)}j]j7sbc.signal_deliveredasbuh1hhjMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubh)}(hksigh]hksig}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjIubj$)}(h int steppingh](j)}(hinth]hint}(hhhjÁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjсhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsteppingh]hstepping}(hhhj߁hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjIubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj"hMl ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hMl ubah}(h]jah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMt hj hhubj)}(hhh]j6)}(h6called after signal delivery to update blocked signalsh]h6called after signal delivery to update blocked signals}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMk hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMl ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j"j3j"j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj,h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj&ubj)}(hhh](j)}(h.``struct ksignal *ksig`` kernel signal struct h](j)}(h``struct ksignal *ksig``h]j<)}(hjKh]hstruct ksignal *ksig}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMl hjEubj)}(hhh]j6)}(hkernel signal structh]hkernel signal struct}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hMl hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMl hjBubj)}(hF``int stepping`` nonzero if debugger single-step or block-step in use h](j)}(h``int stepping``h]j<)}(hjh]h int stepping}(hhhjhhhNhNubah}(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.chMm hj~ubj)}(hhh]j6)}(h4nonzero if debugger single-step or block-step in useh]h4nonzero if debugger single-step or block-step in use}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMm hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMm hjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj&ubj6)}(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 (}(hzThis function should be called when a signal has successfully been delivered. It updates the blocked signals accordingly (hjՂhhhNhNubjv)}(h**ksig->ka.sa.sa_mask**h]hksig->ka.sa.sa_mask}(hhhjނhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjՂubh= is always blocked), and the signal itself is blocked unless }(h= is always blocked), and the signal itself is blocked unless hjՂhhhNhNubj<)}(h``SA_NODEFER``h]h SA_NODEFER}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjՂubh is set in }(h is set in hjՂhhhNhNubjv)}(h**ksig->ka.sa.sa_flags**h]hksig->ka.sa.sa_flags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjՂubh. Tracing is notified.}(h. Tracing is notified.hjՂhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_restart_syscall (C function)c.sys_restart_syscallhNtauh1hhjfhhhNhNubh)}(hhh](h)}(hlong sys_restart_syscall (void)h]h)}(hlong sys_restart_syscall(void)h](j)}(hlongh]hlong}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:hhhjLhM ubh)}(hsys_restart_syscallh]h)}(hsys_restart_syscallh]hsys_restart_syscall}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhjLhM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjsubah}(h]h ]h"]h$]h&]jj uh1jhj:hhhjLhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhjLhM ubah}(h]j1ah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj3hhubj)}(hhh]j6)}(hrestart a system callh]hrestart a system call}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(h'**Parameters** ``void`` no argumentsh](j6)}(h**Parameters**h]jv)}(hjȃh]h Parameters}(hhhjʃhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƃubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjƒubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(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]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjރubah}(h]h ]h"]h$]h&]uh1jhjƒubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ set_current_blocked (C function)c.set_current_blockedhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h+void set_current_blocked (sigset_t *newset)h]h)}(h*void set_current_blocked(sigset_t *newset)h](j)}(hvoidh]hvoid}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=hhhjOhM ubh)}(hset_current_blockedh]h)}(hset_current_blockedh]hset_current_blocked}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjOhM ubj)}(h(sigset_t *newset)h]j$)}(hsigset_t *newseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jdsbc.set_current_blockedasbuh1hhjzubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjzubh)}(hnewseth]hnewset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubah}(h]h ]h"]h$]h&]jj uh1jhj=hhhjOhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjOhM ubah}(h]j4ah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj6hhubj)}(hhh]j6)}(hchange current->blocked maskh]hchange current->blocked mask}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj)}(hhh]j)}(h``sigset_t *newset`` new mask h](j)}(h``sigset_t *newset``h]j<)}(hj(h]hsigset_t *newset}(hhhj*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]j6)}(hnew maskh]hnew mask}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigprocmask (C function)c.sys_rt_sigprocmaskhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMt ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMt ubh)}(hsys_rt_sigprocmaskh]h)}(hsys_rt_sigprocmaskh]hsys_rt_sigprocmask}(hhhjɅhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjŅubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMt ubj)}(hJ(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j$)}(hint howh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhowh]hhow}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj݅ubj$)}(hsigset_t __user *nseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j˅sbc.sys_rt_sigprocmaskasbuh1hhjubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hnseth]hnset}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj݅ubj$)}(hsigset_t __user *oseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j9c.sys_rt_sigprocmaskasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjĆhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hoseth]hoset}(hhhjцhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj݅ubj$)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j9c.sys_rt_sigprocmaskasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(h sigsetsizeh]h sigsetsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj݅ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMt ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMt ubah}(h]jah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMy hjhhubj)}(hhh]j6)}(h,change the list of currently blocked signalsh]h,change the list of currently blocked signals}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMs hjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMt ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMw hj`ubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]j<)}(hjh]hint how}(hhhjhhhNhNubah}(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.chMt hjubj)}(hhh]j6)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMt hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMt hj|ubj)}(h2``sigset_t __user * nset`` stores pending signals h](j)}(h``sigset_t __user * nset``h]j<)}(hjh]hsigset_t __user * nset}(hhhjhhhNhNubah}(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.chMu hjubj)}(hhh]j6)}(hstores pending signalsh]hstores pending signals}(hjهhjׇhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjӇhMu hjԇubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjӇhMu hj|ubj)}(hE``sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``sigset_t __user * oset``h]j<)}(hjh]hsigset_t __user * oset}(hhhjhhhNhNubah}(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.chMv hjubj)}(hhh]j6)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMv hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMv hj|ubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j<)}(hj0h]hsize_t sigsetsize}(hhhj2hhhNhNubah}(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.chMx hj*ubj)}(hhh]j6)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMw hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMx hj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigpending (C function)c.sys_rt_sigpendinghNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hsys_rt_sigpendingh]h)}(hsys_rt_sigpendingh]hsys_rt_sigpending}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h*(sigset_t __user *uset, size_t sigsetsize)h](j$)}(hsigset_t __user *useth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjʈhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj̈modnameN classnameNjajd)}jg]jj)}j]jsbc.sys_rt_sigpendingasbuh1hhjÈubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjÈubh__user}(hhhjÈhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjÈubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjÈubh)}(huseth]huset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjÈubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]jc.sys_rt_sigpendingasbuh1hhj,ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubh)}(h sigsetsizeh]h sigsetsize}(hhhj_hhhNhNubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhhubj)}(hhh]j6)}(h;examine a pending signal that has been raised while blockedh]h;examine a pending signal that has been raised while blocked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(h|**Parameters** ``sigset_t __user * uset`` stores pending signals ``size_t sigsetsize`` size of sigset_t type or largerh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj)}(hhh](j)}(h2``sigset_t __user * uset`` stores pending signals h](j)}(h``sigset_t __user * uset``h]j<)}(hjˉh]hsigset_t __user * uset}(hhhj͉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ʼnubj)}(hhh]j6)}(hstores pending signalsh]hstores pending signals}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjʼnubeh}(h]h ]h"]h$]h&]uh1jhjhM hj‰ubj)}(h5``size_t sigsetsize`` size of sigset_t type or largerh](j)}(h``size_t sigsetsize``h]j<)}(hjh]hsize_t sigsetsize}(hhhjhhhNhNubah}(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]j6)}(hsize of sigset_t type or largerh]hsize of sigset_t type or larger}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj‰ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'copy_siginfo_to_external32 (C function)c.copy_siginfo_to_external32hNtauh1hhjfhhhNhNubh)}(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}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMc ubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjlhMc ubh)}(hcopy_siginfo_to_external32h]h)}(hcopy_siginfo_to_external32h]hcopy_siginfo_to_external32}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMc ubj)}(h>(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j$)}(hstruct compat_siginfo *toh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hcompat_siginfoh]hcompat_siginfo}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.copy_siginfo_to_external32asbuh1hhjubj9)}(h h]h }(hhhjيhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htoh]hto}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h!const struct kernel_siginfo *fromh](j')}(hjn'h]hconst}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj')}(hj*h]hstruct}(hhhj(hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hkernel_siginfoh]hkernel_siginfo}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHmodnameN classnameNjajd)}jg]jՊc.copy_siginfo_to_external32asbuh1hhj ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hfromh]hfrom}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhMc ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhMc ubah}(h]jQah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMk hjShhubj)}(hhh]j6)}(h0copy a kernel siginfo into a compat user siginfoh]h0copy a kernel siginfo into a compat user siginfo}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMb hjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMc ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j‹j3j‹j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj̋h]h Parameters}(hhhj΋hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʋubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf hjƋubj)}(hhh](j)}(h9``struct compat_siginfo *to`` compat siginfo destination h](j)}(h``struct compat_siginfo *to``h]j<)}(hjh]hstruct compat_siginfo *to}(hhhjhhhNhNubah}(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.chMc hjubj)}(hhh]j6)}(hcompat siginfo destinationh]hcompat siginfo destination}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMc hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMc hjubj)}(h<``const struct kernel_siginfo *from`` kernel siginfo source h](j)}(h%``const struct kernel_siginfo *from``h]j<)}(hj$h]h!const struct kernel_siginfo *from}(hhhj&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.chMd hjubj)}(hhh]j6)}(hkernel siginfo sourceh]hkernel siginfo source}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMd hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMd hjubeh}(h]h ]h"]h$]h&]uh1jhjƋubj6)}(h**Note**h]jv)}(hj_h]hNote}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf hjƋubj6)}(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.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf hjƋubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_sigtimedwait (C function)c.do_sigtimedwaithNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hdo_sigtimedwaith]h)}(hdo_sigtimedwaith]hdo_sigtimedwait}(hhhjŌhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(hL(const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h](j$)}(hconst sigset_t *whichh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj݌ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj݌ubh)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jnjsbc.do_sigtimedwaitasbuh1hhj݌ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj݌ubj~)}(hjh]h*}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj݌ubh)}(hwhichh]hwhich}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj݌ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjٌubj$)}(hkernel_siginfo_t *infoh](h)}(hhh]h)}(hkernel_siginfo_th]hkernel_siginfo_t}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjXmodnameN classnameNjajd)}jg]jc.do_sigtimedwaitasbuh1hhjOubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjOubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjOubh)}(hinfoh]hinfo}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjٌubj$)}(hconst struct timespec64 *tsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjÍhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjЍhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjލubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.do_sigtimedwaitasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htsh]hts}(hhhjhhhNhNubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM$hjhhubj)}(hhh]j6)}(h.wait for queued signals specified in **which**h](h%wait for queued signals specified in }(h%wait for queued signals specified in hjEhhhNhNubjv)}(h **which**h]hwhich}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jlj3jlj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjvh]h Parameters}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM#hjpubj)}(hhh](j)}(h5``const sigset_t *which`` queued signals to wait for h](j)}(h``const sigset_t *which``h]j<)}(hjh]hconst sigset_t *which}(hhhjhhhNhNubah}(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]j6)}(hqueued signals to wait forh]hqueued signals to wait for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hN``kernel_siginfo_t *info`` if non-null, the signal's siginfo is returned here h](j)}(h``kernel_siginfo_t *info``h]j<)}(hjΎh]hkernel_siginfo_t *info}(hhhjЎ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]j6)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjȎubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(hF``const struct timespec64 *ts`` upper bound on process time suspensionh](j)}(h``const struct timespec64 *ts``h]j<)}(hjh]hconst struct timespec64 *ts}(hhhj 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.chM#hjubj)}(hhh]j6)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_rt_sigtimedwait (C function)c.sys_rt_sigtimedwaithNtauh1hhjfhhhNhNubh)}(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}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMYubj9)}(h h]h }(hhhjphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]hhhjohMYubh)}(hsys_rt_sigtimedwaith]h)}(hsys_rt_sigtimedwaith]hsys_rt_sigtimedwait}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjohMYubj)}(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')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hsigset_th]hsigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.sys_rt_sigtimedwaitasbuh1hhjubj9)}(h h]h }(hhhj܏hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hutheseh]huthese}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hsiginfo_t __user *uinfoh](h)}(hhh]h)}(h siginfo_th]h siginfo_t}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]j؏c.sys_rt_sigtimedwaitasbuh1hhjubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(huinfoh]huinfo}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h*const struct __kernel_timespec __user *utsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjĐmodnameN classnameNjajd)}jg]j؏c.sys_rt_sigtimedwaitasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hutsh]huts}(hhhj 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}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]j؏c.sys_rt_sigtimedwaitasbuh1hhj"ubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(h sigsetsizeh]h sigsetsize}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj]hhhjohMYubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohMYubah}(h]jTah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_hjVhhubj)}(hhh]j6)}(h=synchronously wait for queued signals specified in **uthese**h](h3synchronously wait for queued signals specified in }(h3synchronously wait for queued signals specified in hjhhhNhNubjv)}(h **uthese**h]huthese}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMXhj}hhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMYubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM\hjubj)}(hhh](j)}(h>``const sigset_t __user * uthese`` queued signals to wait for h](j)}(h"``const sigset_t __user * uthese``h]j<)}(hjБh]hconst sigset_t __user * uthese}(hhhjґ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.chMZhjʑubj)}(hhh]j6)}(hqueued signals to wait forh]hqueued signals to wait for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjʑubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjǑubj)}(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}(hhhj 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.chM[hjubj)}(hhh]j6)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjǑubj)}(hW``const struct __kernel_timespec __user * uts`` upper bound on process time suspension h](j)}(h/``const struct __kernel_timespec __user * uts``h]j<)}(hjBh]h+const struct __kernel_timespec __user * uts}(hhhjDhhhNhNubah}(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]j6)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhM\hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM\hjǑubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j<)}(hj{h]hsize_t sigsetsize}(hhhj}hhhNhNubah}(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^hjuubj)}(hhh]j6)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM]hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjǑubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_kill (C function) c.sys_killhNtauh1hhjfhhhNhNubh)}(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}(hhhjՒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjђhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjђhhhjhMubh)}(hsys_killh]h)}(hsys_killh]hsys_kill}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjђhhhjhMubj)}(h(pid_t pid, int sig)h](j$)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.sys_killasbuh1hhjubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hpidh]hpid}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hint sigh](j)}(hinth]hint}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXubh)}(hsigh]hsig}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʒhhubj)}(hhh]j6)}(hsend a signal to a processh]hsend a signal to a process}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(hW**Parameters** ``pid_t pid`` the PID of the process ``int sig`` signal to be senth](j6)}(h**Parameters**h]jv)}(hjœh]h Parameters}(hhhjǓhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjÓubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h%``pid_t pid`` the PID of the process h](j)}(h ``pid_t pid``h]j<)}(hjh]h pid_t pid}(hhhjhhhNhNubah}(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.chMhjޓubj)}(hhh]j6)}(hthe PID of the processh]hthe PID of the process}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjޓubeh}(h]h ]h"]h$]h&]uh1jhjhMhjۓubj)}(h``int sig`` signal to be senth](j)}(h ``int sig``h]j<)}(hjh]hint sig}(hhhjhhhNhNubah}(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]j6)}(hsignal to be senth]hsignal to be sent}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjۓubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"sys_pidfd_send_signal (C function)c.sys_pidfd_send_signalhNtauh1hhjfhhhNhNubh)}(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}(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM/ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjshhhjhM/ubh)}(hsys_pidfd_send_signalh]h)}(hsys_pidfd_send_signalh]hsys_pidfd_send_signal}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjhM/ubj)}(h@(int pidfd, int sig, siginfo_t __user *info, unsigned int flags)h](j$)}(h int pidfdh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj”hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hpidfdh]hpidfd}(hhhjДhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint sigh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsigh]hsig}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hsiginfo_t __user *infoh](h)}(hhh]h)}(h siginfo_th]h siginfo_t}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jj)}j]jsbc.sys_pidfd_send_signalasbuh1hhjubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hinfoh]hinfo}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM;hjlhhubj)}(hhh]j6)}(h Signal a process through a pidfdh]h Signal a process through a pidfd}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM.hjhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhM/ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM2hjubj)}(hhh](j)}(h-``int pidfd`` file descriptor of the process h](j)}(h ``int pidfd``h]j<)}(hj+h]h int pidfd}(hhhj-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]j6)}(hfile descriptor of the processh]hfile descriptor of the process}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hM/hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM/hj"ubj)}(h``int sig`` signal to send h](j)}(h ``int sig``h]j<)}(hjdh]hint sig}(hhhjfhhhNhNubah}(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.chM0hj^ubj)}(hhh]j6)}(hsignal to sendh]hsignal to send}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhM0hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM0hj"ubj)}(h(``siginfo_t __user * info`` signal info h](j)}(h``siginfo_t __user * info``h]j<)}(hjh]hsiginfo_t __user * info}(hhhjhhhNhNubah}(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.chM1hjubj)}(hhh]j6)}(h signal infoh]h signal info}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hj"ubj)}(h$``unsigned int flags`` future flags h](j)}(h``unsigned int flags``h]j<)}(hj֖h]hunsigned int flags}(hhhjؖ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.chM2hjЖubj)}(hhh]j6)}(h future flagsh]h future flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjЖubeh}(h]h ]h"]h$]h&]uh1jhjhM2hj"ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM4hjubj6)}(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 }(hvSend the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to hj'hhhNhNubjv)}(h **flags**h]hflags}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh. may be used to override the default scope of }(h. may be used to override the default scope of hj'hhhNhNubjv)}(h **pidfd**h]hpidfd}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh.}(hjPhj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM4hjubj6)}(h **Return**h]jv)}(hj^h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM9hjubj6)}(h'0 on success, negative errno on failureh]h'0 on success, negative errno on failure}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_tgkill (C function) c.sys_tgkillhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h sys_tgkillh]h)}(h sys_tgkillh]h sys_tgkill}(hhhjėhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h (pid_t tgid, pid_t pid, int sig)h](j$)}(h pid_t tgidh](h)}(hhh]h)}(hpid_th]hpid_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jƗsb c.sys_tgkillasbuh1hhjܗubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjܗubh)}(htgidh]htgid}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܗubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjؗubj$)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/modnameN classnameNjajd)}jg]j c.sys_tgkillasbuh1hhj&ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hpidh]hpid}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjؗubj$)}(hint sigh](j)}(hinth]hint}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubh)}(hsigh]hsig}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubj)}(hhh]j6)}(h"send signal to one specific threadh]h"send signal to one specific thread}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jјj3jјj4uh1hhhhjfhNhNubjl)}(hXb**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 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](j6)}(h**Parameters**h]jv)}(hjۘh]h Parameters}(hhhjݘhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj٘ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj՘ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h!the thread group ID of the threadh]h!the thread group ID of the thread}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]j<)}(hj3h]h pid_t pid}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj-ubj)}(hhh]j6)}(hthe PID of the threadh]hthe PID of the thread}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(h``int sig`` signal to be sent 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](j)}(h ``int sig``h]j<)}(hjlh]hint sig}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjfubj)}(hhh](j6)}(hsignal to be senth]hsignal to be sent}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj6)}(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 }(hThis syscall also checks the hjhhhNhNubjv)}(h**tgid**h]htgid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj՘ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_tkill (C function) c.sys_tkillhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h sys_tkillh]h)}(h sys_tkillh]h sys_tkill}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(pid_t pid, int sig)h](j$)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]j sb c.sys_tkillasbuh1hhj"ubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hpidh]hpid}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint sigh](j)}(hinth]hint}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubh)}(hsigh]hsig}(hhhjhhhNhNubah}(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]jܙah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjޙhhubj)}(hhh]j6)}(h send signal to one specific taskh]h send signal to one specific task}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]j1j,j2jϚj3jϚj4uh1hhhhjfhNhNubjl)}(h**Parameters** ``pid_t pid`` the PID of the task ``int sig`` signal to be sent Send a signal to only one task, even if it's a CLONE_THREAD task.h](j6)}(h**Parameters**h]jv)}(hjٚh]h Parameters}(hhhjۚhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjךubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjӚubj)}(hhh](j)}(h"``pid_t pid`` the PID of the task h](j)}(h ``pid_t pid``h]j<)}(hjh]h pid_t pid}(hhhjhhhNhNubah}(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]j6)}(hthe PID of the taskh]hthe PID of the task}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h```int sig`` signal to be sent Send a signal to only one task, even if it's a CLONE_THREAD task.h](j)}(h ``int sig``h]j<)}(hj1h]hint sig}(hhhj3hhhNhNubah}(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](j6)}(hsignal to be senth]hsignal to be sent}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjGubj6)}(hASend a signal to only one task, even if it's a CLONE_THREAD task.h]hCSend a signal to only one task, even if it’s a CLONE_THREAD task.}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjӚubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_rt_sigqueueinfo (C function)c.sys_rt_sigqueueinfohNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hsys_rt_sigqueueinfoh]h)}(hsys_rt_sigqueueinfoh]hsys_rt_sigqueueinfo}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h-(pid_t pid, int sig, siginfo_t __user *uinfo)h](j$)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hhhjڛhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjכubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjܛmodnameN classnameNjajd)}jg]jj)}j]jsbc.sys_rt_sigqueueinfoasbuh1hhjӛubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjӛubh)}(hpidh]hpid}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӛubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjϛubj$)}(hint sigh](j)}(hinth]hint}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsigh]hsig}(hhhj=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}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jc.sys_rt_sigqueueinfoasbuh1hhjRubj9)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubh__user}(hhhjRhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRubh)}(huinfoh]huinfo}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubj)}(hhh]j6)}(h#send signal information to a signalh]h#send signal information to a signal}(hjќhjϜhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj̜hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]j<)}(hjh]h pid_t pid}(hhhjhhhNhNubah}(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.chMhj ubj)}(hhh]j6)}(hthe PID of the threadh]hthe PID of the thread}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]j<)}(hjIh]hint sig}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjCubj)}(hhh]j6)}(hsignal to be senth]hsignal to be sent}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubj)}(h3``siginfo_t __user * uinfo`` signal info to be senth](j)}(h``siginfo_t __user * uinfo``h]j<)}(hjh]hsiginfo_t __user * uinfo}(hhhjhhhNhNubah}(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.chMhj|ubj)}(hhh]j6)}(hsignal info to be senth]hsignal info to be sent}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_sigpending (C function)c.sys_sigpendinghNtauh1hhjfhhhNhNubh)}(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}(hhhjܝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؝hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM+ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj؝hhhjhM+ubh)}(hsys_sigpendingh]h)}(hsys_sigpendingh]hsys_sigpending}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj؝hhhjhM+ubj)}(h(old_sigset_t __user *uset)h]j$)}(hold_sigset_t __user *useth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.sys_sigpendingasbuh1hhjubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(huseth]huset}(hhhjihhhNhNubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-hjѝhhubj)}(hhh]j6)}(hexamine pending signalsh]hexamine pending signals}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jhjѝhhhjhM+ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(hY**Parameters** ``old_sigset_t __user * uset`` where mask of pending signal is returnedh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM.hjubj)}(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}(hhhjמ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.chM0hjϞubj)}(hhh]j6)}(h(where mask of pending signal is returnedh]h(where mask of pending signal is returned}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]uh1jhjhM0hj̞ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_sigprocmask (C function)c.sys_sigprocmaskhNtauh1hhjfhhhNhNubh)}(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}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMLubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+hhhj=hMLubh)}(hsys_sigprocmaskh]h)}(hsys_sigprocmaskh]hsys_sigprocmask}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj=hMLubj)}(h?(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j$)}(hint howh](j)}(hinth]hint}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubh)}(hhowh]hhow}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubj$)}(hold_sigset_t __user *nseth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jRsbc.sys_sigprocmaskasbuh1hhjubj9)}(h h]h }(hhhjğhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhj֟hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hnseth]hnset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubj$)}(hold_sigset_t __user *oseth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.sys_sigprocmaskasbuh1hhjubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh__user}(hhhjhhhNhNubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hoseth]hoset}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubeh}(h]h ]h"]h$]h&]jj uh1jhj+hhhj=hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj=hMLubah}(h]j"ah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMShj$hhubj)}(hhh]j6)}(h"examine and change blocked signalsh]h"examine and change blocked signals}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMKhjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMLubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMOhjubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]j<)}(hjĠh]hint how}(hhhjƠ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.chMLhjubj)}(hhh]j6)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjߠhjݠhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj٠hMLhjڠubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj٠hMLhjubj)}(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}(hhhjhhhNhNubah}(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.chMMhjubj)}(hhh]j6)}(h&signals to add or remove (if non-null)h]h&signals to add or remove (if non-null)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubj)}(hI``old_sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``old_sigset_t __user * oset``h]j<)}(hj6h]hold_sigset_t __user * oset}(hhhj8hhhNhNubah}(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.chMNhj0ubj)}(hhh]j6)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhMNhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMNhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMPhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigaction (C function)c.sys_rt_sigactionhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj9)}(h h]h }(hhhjšhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjġhMubh)}(hsys_rt_sigactionh]h)}(hsys_rt_sigactionh]hsys_rt_sigaction}(hhhjסhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӡubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjġhMubj)}(h_(int sig, const struct sigaction __user *act, struct sigaction __user *oact, size_t sigsetsize)h](j$)}(hint sigh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsigh]hsig}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h"const struct sigaction __user *acth](j')}(hjn'h]hconst}(hhhj(hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj$ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj')}(hj*h]hstruct}(hhhjChhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj$ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh)}(hhh]h)}(h sigactionh]h sigaction}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcmodnameN classnameNjajd)}jg]jj)}j]j١sbc.sys_rt_sigactionasbuh1hhj$ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh__user}(hhhj$hhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$ubh)}(hacth]hact}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct sigaction __user *oacth](j')}(hj*h]hstruct}(hhhjǢhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjâubj9)}(h h]h }(hhhjԢhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjâubh)}(hhh]h)}(h sigactionh]h sigaction}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j}c.sys_rt_sigactionasbuh1hhjâubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjâubh__user}(hhhjâhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjâubj~)}(hjh]h*}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjâubh)}(hoacth]hoact}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjâubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]j}c.sys_rt_sigactionasbuh1hhjEubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubh)}(h sigsetsizeh]h sigsetsize}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubj)}(hhh]j6)}(h"alter an action taken by a processh]h"alter an action taken by a process}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjġhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjţh]h Parameters}(hhhjǣhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjãubah}(h]h ]h"]h$]h&]uh1j5hQ/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<)}(hjh]hint sig}(hhhjhhhNhNubah}(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.chMhjޣubj)}(hhh]j6)}(hsignal to be senth]hsignal to be sent}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(h new sigactionh]h new sigaction}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjۣubj)}(hG``struct sigaction __user * oact`` used to save the previous sigaction h](j)}(h"``struct sigaction __user * oact``h]j<)}(hjVh]hstruct sigaction __user * oact}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjPubj)}(hhh]j6)}(h#used to save the previous sigactionh]h#used to save the previous sigaction}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjۣubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j<)}(hjh]hsize_t sigsetsize}(hhhjhhhNhNubah}(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]j6)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/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&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigsuspend (C function)c.sys_rt_sigsuspendhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM_ubh)}(hsys_rt_sigsuspendh]h)}(hsys_rt_sigsuspendh]hsys_rt_sigsuspend}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM_ubj)}(h-(sigset_t __user *unewset, size_t sigsetsize)h](j$)}(hsigset_t __user *unewseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]j sbc.sys_rt_sigsuspendasbuh1hhj"ubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh__user}(hhhj"hhhNhNubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj~)}(hjh]h*}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"ubh)}(hunewseth]hunewset}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jEc.sys_rt_sigsuspendasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(h sigsetsizeh]h sigsetsize}(hhhjhhhNhNubah}(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]jܤah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMchjޤhhubj)}(hhh]j6)}(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 }(h-replace the signal mask for a value with the hjhhhNhNubjv)}(h **unewset**h]hunewset}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh! value until a signal is received}(h! value until a signal is receivedhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^hjhhubah}(h]h ]h"]h$]h&]uh1jhjޤhhhjhM_ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(ht**Parameters** ``sigset_t __user * unewset`` new signal mask value ``size_t sigsetsize`` size of sigset_t typeh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMbhjubj)}(hhh](j)}(h4``sigset_t __user * unewset`` new signal mask value h](j)}(h``sigset_t __user * unewset``h]j<)}(hj>h]hsigset_t __user * unewset}(hhhj@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`hj8ubj)}(hhh]j6)}(hnew signal mask valueh]hnew signal mask value}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShM`hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM`hj5ubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j<)}(hjwh]hsize_t sigsetsize}(hhhjyhhhNhNubah}(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.chMbhjqubj)}(hhh]j6)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMahjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMbhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_create (C macro)c.kthread_createhNtauh1hhjfhhhNhNubh)}(hhh](h)}(hkthread_createh]h)}(hkthread_createh]h)}(hkthread_createh]h)}(hj˦h]hkthread_create}(hhhjզ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.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjɦhhhjhKubah}(h]jĦah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjƦhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjƦhhhjhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubj6)}(h4``kthread_create (threadfn, data, namefmt, arg...)``h]j<)}(hjh]h0kthread_create (threadfn, data, namefmt, arg...)}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjfhhubjR)}(hhh]j6)}(h$create a kthread on the current nodeh]h$create a kthread on the current node}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubah}(h]h ]h"]h$]h&]uh1jQhjfhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj<h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj6ubj)}(hhh](j)}(h/``threadfn`` the function to run in the thread h](j)}(h ``threadfn``h]j<)}(hj[h]hthreadfn}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjUubj)}(hhh]j6)}(h!the function to run in the threadh]h!the function to run in the thread}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjRubj)}(h+``data`` data pointer for **threadfn\(\)** h](j)}(h``data``h]j<)}(hjh]hdata}(hhhjhhhNhNubah}(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]j6)}(h!data pointer for **threadfn\(\)**h](hdata pointer for }(hdata pointer for hjhhhNhNubjv)}(h**threadfn\(\)**h]h threadfn()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubj)}(h;``namefmt`` printf-style format string for the thread name h](j)}(h ``namefmt``h]j<)}(hjܧh]hnamefmt}(hhhjާ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]j6)}(h.printf-style format string for the thread nameh]h.printf-style format string for the thread name}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj֧ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubj)}(h&``arg...`` arguments for **namefmt**. h](j)}(h ``arg...``h]j<)}(hjh]harg...}(hhhjhhhNhNubah}(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]j6)}(harguments for **namefmt**.h](harguments for }(harguments for hj.hhhNhNubjv)}(h **namefmt**h]hnamefmt}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh.}(hjPhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj6ubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_run (C macro) c.kthread_runhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h kthread_runh]h)}(h kthread_runh]h)}(h kthread_runh]h)}(hjh]h kthread_run}(hhhjhhhNhNubah}(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.hhK4ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK4ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK3hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK4ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j٨j3j٨j4uh1hhhhjfhNhNubj6)}(h.``kthread_run (threadfn, data, namefmt, ...)``h]j<)}(hjߨh]h*kthread_run (threadfn, data, namefmt, ...)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjݨubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK5hjfhhubjR)}(hhh]j6)}(hcreate and wake a thread.h]hcreate and wake a thread.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK+hjubah}(h]h ]h"]h$]h&]uh1jQhjfhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK/hj ubj)}(hhh](j)}(h@``threadfn`` the function to run until signal_pending(current). h](j)}(h ``threadfn``h]j<)}(hj2h]hthreadfn}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK,hj,ubj)}(hhh]j6)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhK,hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhK,hj)ubj)}(h$``data`` data ptr for **threadfn**. h](j)}(h``data``h]j<)}(hjkh]hdata}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK-hjeubj)}(hhh]j6)}(hdata ptr for **threadfn**.h](h data ptr for }(h data ptr for hjhhhNhNubjv)}(h **threadfn**h]hthreadfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhK-hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhK-hj)ubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]j<)}(hjh]hnamefmt}(hhhjhhhNhNubah}(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]j6)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjҩhjЩhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj̩hK.hjͩubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̩hK.hj)ubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(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.hhK1hjubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK3hj ubj6)}(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).}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK0hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_run_on_cpu (C function)c.kthread_run_on_cpuhNtauh1hhjfhhhNhNubh)}(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}(hhhjphhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjlhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK>ubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlhhhj}hK>ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]kthread_run_on_cpusbc.kthread_run_on_cpuasbuh1hhjlhhhj}hK>ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlhhhj}hK>ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlhhhj}hK>ubh)}(hkthread_run_on_cpuh]h)}(hjh]hkthread_run_on_cpu}(hhhjϪhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˪ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj}hK>ubj)}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j$)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hthreadfnh]hthreadfn}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj)}(hvoidh]hvoid}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hhhj٫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjիubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjիubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjիubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjիubh)}(hcpuh]hcpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjիubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *namefmth](j')}(hjn'h]hconst}(hhhj*hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj&ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj)}(hcharh]hchar}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hnamefmth]hnamefmt}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjlhhhj}hK>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj}hK>ubah}(h]jcah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKHhjehhubj)}(hhh]j6)}(h#create and wake a cpu bound thread.h]h#create and wake a cpu bound thread.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=hjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj}hK>ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKAhjubj)}(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)}(hhhjܬ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]j6)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK>hjubah}(h]h ]h"]h$]h&]uh1jhjԬubeh}(h]h ]h"]h$]h&]uh1jhjhK>hjѬubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(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?hj ubj)}(hhh]j6)}(hdata ptr for **threadfn**.h](h data ptr for }(h data ptr for hj,hhhNhNubjv)}(h **threadfn**h]hthreadfn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh.}(hjPhj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj(hK?hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hK?hjѬubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]j<)}(hj_h]hunsigned int cpu}(hhhjahhhNhNubah}(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@hjYubj)}(hhh]j6)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthK@hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthK@hjѬ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}(hhhjhhhNhNubah}(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.hhKBhjubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjѬubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjԭh]h Description}(hhhj֭hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjҭubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKDhjubj6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kthread_should_stop (C function)c.kthread_should_stophNtauh1hhjfhhhNhNubh)}(hhh](h)}(hbool kthread_should_stop (void)h]h)}(hbool kthread_should_stop(void)h](j)}(hjh]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj&hKubh)}(hkthread_should_stoph]h)}(hkthread_should_stoph]hkthread_should_stop}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj&hKubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hKubah}(h]j ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubj)}(hhh]j6)}(hshould this kthread return now?h]hshould this kthread return now?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj&hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhjî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]j6)}(h no argumentsh]h no arguments}(hjܮhjڮhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj֮hKhj׮ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֮hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kthread_should_park (C function)c.kthread_should_parkhNtauh1hhjfhhhNhNubh)}(hhh](h)}(hbool kthread_should_park (void)h]h)}(hbool kthread_should_park(void)h](j)}(hjh]hbool}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=hhhjNhKubh)}(hkthread_should_parkh]h)}(hkthread_should_parkh]hkthread_should_park}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjNhKubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjuubah}(h]h ]h"]h$]h&]jj uh1jhj=hhhjNhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjNhKubah}(h]j4ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj6hhubj)}(hhh]j6)}(hshould this kthread park now?h]hshould this kthread park now?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjNhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjʯh]h Parameters}(hhhj̯hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȯubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjįubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(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]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjįubj6)}(h**Description**h]jv)}(hj$h]h Description}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjįubj6)}(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()}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjįubj6)}(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.}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjįubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*kthread_freezable_should_stop (C function)c.kthread_freezable_should_stophNtauh1hhjfhhhNhNubh)}(hhh](h)}(h5bool kthread_freezable_should_stop (bool *was_frozen)h]h)}(h4bool kthread_freezable_should_stop(bool *was_frozen)h](j)}(hjh]hbool}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjhKubh)}(hkthread_freezable_should_stoph]h)}(hkthread_freezable_should_stoph]hkthread_freezable_should_stop}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhKubj)}(h(bool *was_frozen)h]j$)}(hbool *was_frozenh](j)}(hjh]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjϰhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h was_frozenh]h was_frozen}(hhhjܰhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjthhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhKubah}(h]jkah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjmhhubj)}(hhh]j6)}(h)should this freezable kthread return now?h]h)should this freezable kthread return now?}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hR/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<)}(hjHh]hbool *was_frozen}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjBubj)}(hhh]j6)}(h@optional out parameter, indicates whether ``current`` was frozenh](h*optional out parameter, indicates whether }(h*optional out parameter, indicates whether hjahhhNhNubj<)}(h ``current``h]hcurrent}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubh was frozen}(h was frozenhjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj]hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj#ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_func (C function)c.kthread_funchNtauh1hhjfhhhNhNubh)}(hhh](h)}(h.void * kthread_func (struct task_struct *task)h]h)}(h,void *kthread_func(struct task_struct *task)h](j)}(hvoidh]hvoid}(hhhjܱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjرhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjرhhhjhKubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjرhhhjhKubh)}(h kthread_funch]h)}(h kthread_funch]h kthread_func}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjرhhhjhKubj)}(h(struct task_struct *task)h]j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhj&hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj"ubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjFmodnameN classnameNjajd)}jg]jj)}j]j sbc.kthread_funcasbuh1hhj"ubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj~)}(hjh]h*}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"ubh)}(htaskh]htask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjرhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjԱhhhjhKubah}(h]jϱah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjѱhhubj)}(hhh]j6)}(h1return the function specified on kthread creationh]h1return the function specified on kthread creation}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjѱhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j²j3j²j4uh1hhhhjfhNhNubjl)}(h**Parameters** ``struct task_struct *task`` kthread task in question **Description** Returns NULL if the task is not a kthread.h](j6)}(h**Parameters**h]jv)}(hj̲h]h Parameters}(hhhjβhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʲubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjƲubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hkthread task in questionh]hkthread task in question}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjƲubj6)}(h**Description**h]jv)}(hj&h]h Description}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjƲubj6)}(h*Returns NULL if the task is not a kthread.h]h*Returns NULL if the task is not a kthread.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjƲubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_data (C function)c.kthread_datahNtauh1hhjfhhhNhNubh)}(hhh](h)}(h.void * kthread_data (struct task_struct *task)h]h)}(h,void *kthread_data(struct task_struct *task)h](j)}(hvoidh]hvoid}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjghhhjyhKubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjghhhjyhKubh)}(h kthread_datah]h)}(h kthread_datah]h kthread_data}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjyhKubj)}(h(struct task_struct *task)h]j$)}(hstruct task_struct *taskh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj³hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjӳhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjгubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjճmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_dataasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(htaskh]htask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjghhhjyhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjyhKubah}(h]j^ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj`hhubj)}(hhh]j6)}(h/return data value specified on kthread creationh]h/return data value specified on kthread creation}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj6hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jQj3jQj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj[h]h Parameters}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjUubj)}(hhh]j)}(h6``struct task_struct *task`` kthread task in question h](j)}(h``struct task_struct *task``h]j<)}(hjzh]hstruct task_struct *task}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjtubj)}(hhh]j6)}(hkthread task in questionh]hkthread task in question}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjUubj6)}(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 }(h-Return the data value specified when kthread hj˴hhhNhNubjv)}(h**task**h]htask}(hhhjԴhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj˴ubhE was created. The caller is responsible for ensuring the validity of }(hE was created. The caller is responsible for ensuring the validity of hj˴hhhNhNubjv)}(h**task**h]htask}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj˴ubh when calling this function.}(h when calling this function.hj˴hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_exit (C function)c.kthread_exithNtauh1hhjfhhhNhNubh)}(hhh](h)}(h*void __noreturn kthread_exit (long result)h]h)}(h)void __noreturn kthread_exit(long result)h](j)}(hvoidh]hvoid}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj/hM0ubh __noreturn}(hhhjhhhNhNubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj/hM0ubh)}(h kthread_exith]h)}(h kthread_exith]h kthread_exit}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj/hM0ubj)}(h (long result)h]j$)}(h long resulth](j)}(hlongh]hlong}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubh)}(hresulth]hresult}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj/hM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj/hM0ubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hjhhubj)}(hhh]j6)}(h>Cause the current kthread return **result** to kthread_stop().h](h!Cause the current kthread return }(h!Cause the current kthread return hjhhhNhNubjv)}(h **result**h]hresult}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to kthread_stop().}(h to kthread_stop().hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(hX%**Parameters** ``long result`` The integer value to return to kthread_stop(). **Description** While kthread_exit can be called directly, it exists so that functions which do some additional work in non-modular code such as module_put_and_kthread_exit can be implemented. Does not return.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3hjubj)}(hhh]j)}(h?``long result`` The integer value to return to kthread_stop(). h](j)}(h``long result``h]j<)}(hj h]h long result}(hhhjhhhNhNubah}(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.chM0hjubj)}(hhh]j6)}(h.The integer value to return to kthread_stop().h]h.The integer value to return to kthread_stop().}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hM0hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM0hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjGh]h Description}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjubj6)}(hWhile kthread_exit can be called directly, it exists so that functions which do some additional work in non-modular code such as module_put_and_kthread_exit can be implemented.h]hWhile kthread_exit can be called directly, it exists so that functions which do some additional work in non-modular code such as module_put_and_kthread_exit can be implemented.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjubj6)}(hDoes not return.h]hDoes not return.}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&kthread_complete_and_exit (C function)c.kthread_complete_and_exithNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMBubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMBubh __noreturn}(hhhjhhhNhNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMBubh)}(hkthread_complete_and_exith]h)}(hkthread_complete_and_exith]hkthread_complete_and_exit}(hhhjζhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʶubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMBubj)}(h$(struct completion *comp, long code)h](j$)}(hstruct completion *comph](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h completionh]h completion}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jжsbc.kthread_complete_and_exitasbuh1hhjubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hcomph]hcomp}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h long codeh](j)}(hlongh]hlong}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXubh)}(hcodeh]hcode}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMBubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLhjhhubj)}(hhh]j6)}(hExit the current kthread.h]hExit the current kthread.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMAhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMBubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjŷh]h Parameters}(hhhjǷhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj÷ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMEhjubj)}(hhh](j)}(h3``struct completion *comp`` Completion to complete h](j)}(h``struct completion *comp``h]j<)}(hjh]hstruct completion *comp}(hhhjhhhNhNubah}(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.chMBhj޷ubj)}(hhh]j6)}(hCompletion to completeh]hCompletion to complete}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhj޷ubeh}(h]h ]h"]h$]h&]uh1jhjhMBhj۷ubj)}(h=``long code`` The integer value to return to kthread_stop(). h](j)}(h ``long code``h]j<)}(hjh]h long code}(hhhjhhhNhNubah}(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.chMChjubj)}(hhh]j6)}(h.The integer value to return to kthread_stop().h]h.The integer value to return to kthread_stop().}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMChj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMChj۷ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMEhjubj6)}(hEIf present, complete **comp** and then return code to kthread_stop().h](hIf present, complete }(hIf present, complete hjnhhhNhNubjv)}(h**comp**h]hcomp}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh( and then return code to kthread_stop().}(h( and then return code to kthread_stop().hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMEhjubj6)}(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 }(hDA kernel thread whose module may be removed after the completion of hjhhhNhNubjv)}(h**comp**h]hcomp}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh& can use this function to exit safely.}(h& can use this function to exit safely.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMGhjubj6)}(hDoes not return.h]hDoes not return.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kthread_create_on_node (C function)c.kthread_create_on_nodehNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj߸hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj߸hhhjhMubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]kthread_create_on_nodesbc.kthread_create_on_nodeasbuh1hhj߸hhhjhMubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj߸hhhjhMubj~)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj߸hhhjhMubh)}(hkthread_create_on_nodeh]h)}(hj h]hkthread_create_on_node}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj߸hhhjhMubj)}(hN(int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h](j$)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hj7h]h(}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hthreadfnh]hthreadfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(h h]h }(hhhjɹhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hjh]h*}(hhhj׹hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(hint nodeh](j)}(hinth]hint}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hnodeh]hnode}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(hconst char namefmt[]h](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hnamefmth]hnamefmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubj~)}(h[h]h[}(hhhjƺhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}ubj~)}(h]h]h]}(hhhjԺhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(h...h]j~)}(h...h]h...}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubeh}(h]h ]h"]h$]h&]jj uh1jhj߸hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj۸hhhjhMubah}(h]jָah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjظhhubj)}(hhh]j6)}(hcreate a kthread.h]hcreate a kthread.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjظhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j0j3j0j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj:h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]j<)}(hjYh]hint (*threadfn)(void *data)}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjWubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjSubj)}(hhh]j6)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(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]j6)}(hdata ptr for **threadfn**.h](h data ptr for }(h data ptr for hjhhhNhNubjv)}(h **threadfn**h]hthreadfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjPubj)}(hR``int node`` task and thread structures for the thread are allocated on this node h](j)}(h ``int node``h]j<)}(hj޻h]hint node}(hhhjhhhNhNubah}(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]j6)}(hDtask and thread structures for the thread are allocated on this nodeh]hDtask and thread structures for the thread are allocated on this node}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjػubeh}(h]h ]h"]h$]h&]uh1jhjhMhjPubj)}(h;``const char namefmt[]`` printf-style name for the thread. h](j)}(h``const char namefmt[]``h]j<)}(hjh]hconst char namefmt[]}(hhhjhhhNhNubah}(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]j6)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjPubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjPh]h...}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubj6)}(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 }(hEIf thread is going to be bound on a particular cpu, give its node in hjhhhNhNubjv)}(h**node**h]hnode}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhe, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run }(he, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run hjhhhNhNubjv)}(h**threadfn\(\)**h]h threadfn()}(hhhj̼hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with }(h with hjhhhNhNubjv)}(h**data**h]hdata}(hhhj߼hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh as its argument. }(h as its argument. hjhhhNhNubjv)}(h**threadfn\(\)**h]h threadfn()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX& 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().}(hX" 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().hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubj6)}(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).}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_bind (C function)c.kthread_bindhNtauh1hhjfhhhNhNubh)}(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}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM$ubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7hhhjIhM$ubh)}(h kthread_bindh]h)}(h kthread_bindh]h kthread_bind}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhM$ubj)}(h)(struct task_struct *p, unsigned int cpu)h](j$)}(hstruct task_struct *ph](j')}(hj*h]hstruct}(hhhjxhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j^sbc.kthread_bindasbuh1hhjtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubj~)}(hjh]h*}(hhhjĽhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjtubh)}(hjh]hp}(hhhjѽhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjpubj$)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjpubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhjIhM$ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhM$ubah}(h]j.ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM+hj0hhubj)}(hhh]j6)}(h%bind a just-created kthread to a cpu.h]h%bind a just-created kthread to a cpu.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM#hjIhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhM$ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jdj3jdj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM'hjhubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(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<)}(hjƾh]hunsigned int cpu}(hhhjȾ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.chM%hjubj)}(hhh]j6)}(h@cpu (might not be online, must be possible) for **k** to run on.h](h0cpu (might not be online, must be possible) for }(h0cpu (might not be online, must be possible) for hj߾hhhNhNubjv)}(h**k**h]hk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj߾ubh to run on.}(h to run on.hj߾hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj۾hM%hjܾubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۾hM%hjubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM'hjhubj6)}(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 }(h?This function is equivalent to set_cpus_allowed(), except that hj+hhhNhNubjv)}(h**cpu**h]hcpu}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubhi doesn’t need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).}(hg doesn't need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM'hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kthread_create_on_cpu (C function)c.kthread_create_on_cpuhNtauh1hhjfhhhNhNubh)}(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}(hhhjnhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3ubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjhhhj{hM3ubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]kthread_create_on_cpusbc.kthread_create_on_cpuasbuh1hhjjhhhj{hM3ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjhhhj{hM3ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjhhhj{hM3ubh)}(hkthread_create_on_cpuh]h)}(hjh]hkthread_create_on_cpu}(hhhjͿhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɿubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhj{hM3ubj)}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j$)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hthreadfnh]hthreadfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj)}(hvoidh]hvoid}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *namefmth](j')}(hjn'h]hconst}(hhhj(hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj$ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj)}(hcharh]hchar}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubj~)}(hjh]h*}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$ubh)}(hnamefmth]hnamefmt}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhj{hM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhj{hM3ubah}(h]jaah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM;hjchhubj)}(hhh]j6)}(hCreate a cpu bound kthreadh]hCreate a cpu bound kthread}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jhjchhhj{hM3ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjubj)}(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)}(hhhjhhhNhNubah}(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.chM3hjubj)}(hhh]j6)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(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.chM4hj ubj)}(hhh]j6)}(hdata ptr for **threadfn**.h](h data ptr for }(h data ptr for hj*hhhNhNubjv)}(h **threadfn**h]hthreadfn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh.}(hjPhj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj&hM4hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM4hjubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]j<)}(hj]h]hunsigned int cpu}(hhhj_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.chM5hjWubj)}(hhh]j6)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhM5hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM5hjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjubj6)}(h6This helper function creates and names a kernel threadh]h6This helper function creates and names a kernel thread}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_unpark (C function)c.kthread_unparkhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h+void kthread_unpark (struct task_struct *k)h]h)}(h*void kthread_unpark(struct task_struct *k)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj%hMhubh)}(hkthread_unparkh]h)}(hkthread_unparkh]hkthread_unpark}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hMhubj)}(h(struct task_struct *k)h]j$)}(hstruct task_struct *kh](j')}(hj*h]hstruct}(hhhjThhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjPubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjtmodnameN classnameNjajd)}jg]jj)}j]j:sbc.kthread_unparkasbuh1hhjPubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj3h]hk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hMhubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hMhubah}(h]j ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMnhj hhubj)}(hhh]j6)}(h,unpark a thread created by kthread_create().h]h,unpark a thread created by kthread_create().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hMhubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMkhjubj)}(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}(hhhjhhhNhNubah}(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.chMhhjubj)}(hhh]j6)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjSh]h Description}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMjhjubj6)}(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 }(hSets kthread_should_park() for hjihhhNhNubjv)}(h**k**h]hk}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubhw to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.}(hw to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_park (C function)c.kthread_parkhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h(int kthread_park (struct task_struct *k)h]h)}(h'int kthread_park(struct task_struct *k)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h kthread_parkh]h)}(h kthread_parkh]h kthread_park}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_parkasbuh1hhjubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj3h]hk}(hhhjBhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(h*park a thread created by kthread_create().h]h*park a thread created by kthread_create().}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhjhhhNhNubah}(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]j6)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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 }(hSets kthread_should_park() for hjhhhNhNubjv)}(h**k**h]hk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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.}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_stop (C function)c.kthread_stophNtauh1hhjfhhhNhNubh)}(hhh](h)}(h(int kthread_stop (struct task_struct *k)h]h)}(h'int kthread_stop(struct task_struct *k)h](j)}(hinth]hint}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLhhhj^hMubh)}(h kthread_stoph]h)}(h kthread_stoph]h kthread_stop}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhj^hMubj)}(h(struct task_struct *k)h]j$)}(hstruct task_struct *kh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jssbc.kthread_stopasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj3h]hk}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEhhubj)}(hhh]j6)}(h*stop a thread created by kthread_create().h]h*stop a thread created by kthread_create().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/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&]j1j,j2j(j3j(j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hR/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<)}(hjQh]hstruct task_struct *k}(hhhjShhhNhNubah}(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]j6)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj,ubj6)}(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 }(hSets kthread_should_stop() for hjhhhNhNubjv)}(h**k**h]hk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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().hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj,ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj,ubj6)}(hVReturns the result of threadfn(), or ``-EINTR`` if wake_up_process() was never called.h](h%Returns the result of threadfn(), or }(h%Returns the result of threadfn(), or hjhhhNhNubj<)}(h ``-EINTR``h]h-EINTR}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh' if wake_up_process() was never called.}(h' if wake_up_process() was never called.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_stop_put (C function)c.kthread_stop_puthNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj%hMubh)}(hkthread_stop_puth]h)}(hkthread_stop_puth]hkthread_stop_put}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hMubj)}(h(struct task_struct *k)h]j$)}(hstruct task_struct *kh](j')}(hj*h]hstruct}(hhhjThhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjPubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjtmodnameN classnameNjajd)}jg]jj)}j]j:sbc.kthread_stop_putasbuh1hhjPubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj3h]hk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj hhubj)}(hhh]j6)}(h%stop a thread and put its task structh]h%stop a thread and put its task struct}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/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&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhjhhhNhNubah}(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]j6)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjSh]h Description}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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().}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_worker_fn (C function)c.kthread_worker_fnhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h(int kthread_worker_fn (void *worker_ptr)h]h)}(h'int kthread_worker_fn(void *worker_ptr)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkthread_worker_fnh]h)}(hkthread_worker_fnh]hkthread_worker_fn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(void *worker_ptr)h]j$)}(hvoid *worker_ptrh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h worker_ptrh]h worker_ptr}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM"hjhhubj)}(hhh]j6)}(h*kthread function to process kthread_workerh]h*kthread function to process kthread_worker}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jAj3jAj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjKh]h Parameters}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEubj)}(hhh]j)}(h;``void *worker_ptr`` pointer to initialized kthread_worker h](j)}(h``void *worker_ptr``h]j<)}(hjjh]hvoid *worker_ptr}(hhhjlhhhNhNubah}(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]j6)}(h%pointer to initialized kthread_workerh]h%pointer to initialized kthread_worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kthread_create_worker (C function)c.kthread_create_workerhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h]struct kthread_worker * kthread_create_worker (unsigned int flags, const char namefmt[], ...)h]h)}(h[struct kthread_worker *kthread_create_worker(unsigned int flags, const char namefmt[], ...)h](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM~ubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]jj)}j]kthread_create_workersbc.kthread_create_workerasbuh1hhjhhhjhM~ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM~ubj~)}(hjh]h*}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhM~ubh)}(hkthread_create_workerh]h)}(hjEh]hkthread_create_worker}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM~ubj)}(h/(unsigned int flags, const char namefmt[], ...)h](j$)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubj$)}(hconst char namefmt[]h](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnamefmth]hnamefmt}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjȺh]h[}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjֺh]h]}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubj$)}(h...h]j~)}(hjh]h...}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM~ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM~ubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(hcreate a kthread workerh]hcreate a kthread worker}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM}hjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM~ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(hX**Parameters** ``unsigned int flags`` flags modifying the default behavior of the worker ``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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubj)}(hJ``const char namefmt[]`` printf-style name for the kthread worker (task). h](j)}(h``const char namefmt[]``h]j<)}(hjh]hconst char namefmt[]}(hhhjhhhNhNubah}(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]j6)}(h0printf-style name for the kthread worker (task).h]h0printf-style name for the kthread worker (task).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(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]j6)}(hvariable argumentsh]hvariable arguments}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjUh]h Description}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)kthread_create_worker_on_cpu (C function)c.kthread_create_worker_on_cpuhNtauh1hhjfhhhNhNubh)}(hhh](h)}(hmstruct kthread_worker * kthread_create_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[], ...)h]h)}(hkstruct kthread_worker *kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[], ...)h](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]kthread_create_worker_on_cpusbc.kthread_create_worker_on_cpuasbuh1hhjhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhMubh)}(hkthread_create_worker_on_cpuh]h)}(hjh]hkthread_create_worker_on_cpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h8(int cpu, unsigned int flags, const char namefmt[], ...)h](j$)}(hint cpuh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcpuh]hcpu}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubj)}(hinth]hint}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hconst char namefmt[]h](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnamefmth]hnamefmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjȺh]h[}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjֺh]h]}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h...h]j~)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(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.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jFj3jFj4uh1hhhhjfhNhNubjl)}(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 kthread worker (task). ``...`` variable arguments **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](j6)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj)}(hhh](j)}(h``int cpu`` CPU number h](j)}(h ``int cpu``h]j<)}(hjoh]hint cpu}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjiubj)}(hhh]j6)}(h CPU numberh]h CPU number}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]j<)}(hjh]hunsigned int flags}(hhhjhhhNhNubah}(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]j6)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(hJ``const char namefmt[]`` printf-style name for the kthread worker (task). h](j)}(h``const char namefmt[]``h]j<)}(hjh]hconst char namefmt[]}(hhhjhhhNhNubah}(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]j6)}(h0printf-style name for the kthread worker (task).h]h0printf-style name for the kthread worker (task).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(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]j6)}(hvariable argumentsh]hvariable arguments}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjUh]h Description}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(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.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(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/}(hA good practice is to add the cpu number also into the worker name. For example, use kthread_create_worker_on_cpu(cpu, "helper/hjzhhhNhNubj<)}(h``d``h]hd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubh ”, cpu).}(h", cpu).hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(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:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubjR)}(hhh]j`)}(hhh](jo)}(h?CPU affinity gets lost when it is scheduled on an offline CPU. h]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubjo)}(hSThe worker might not exist when the CPU was off when the user created the workers. h]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubah}(h]h ]h"]h$]h&]uh1jnhjubeh}(h]h ]h"]h$]h&]jajauh1j`hjhMhjubah}(h]h ]h"]h$]h&]uh1jQhjJubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubj6)}(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(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_queue_work (C function)c.kthread_queue_workhNtauh1hhjfhhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQhhhjbhMubh)}(hkthread_queue_workh]h)}(hkthread_queue_workh]hkthread_queue_work}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjbhMubj)}(h:(struct kthread_worker *worker, struct kthread_work *work)h](j$)}(hstruct kthread_worker *workerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jwsbc.kthread_queue_workasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkerh]hworker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct kthread_work *workh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jc.kthread_queue_workasbuh1hhjubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkh]hwork}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjbhMubah}(h]jHah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJhhubj)}(hhh]j6)}(hqueue a kthread_workh]hqueue a kthread_work}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjbhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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_worker_create(). 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhjhhhNhNubah}(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]j6)}(htarget kthread_workerh]htarget kthread_worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hkthread_work to queueh]hkthread_work to queue}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(hQueue **work** to work processor **task** for async execution. **task** must have been created with kthread_worker_create(). Returns ``true`` if **work** was successfully queued, ``false`` if it was already pending.h](hQueue }(hQueue hjPhhhNhNubjv)}(h**work**h]hwork}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh to work processor }(h to work processor hjPhhhNhNubjv)}(h**task**h]htask}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh for async execution. }(h for async execution. hjPhhhNhNubjv)}(h**task**h]htask}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh? must have been created with kthread_worker_create(). Returns }(h? must have been created with kthread_worker_create(). Returns hjPhhhNhNubj<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubh if }(h if hjPhhhNhNubjv)}(h**work**h]hwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh was successfully queued, }(h was successfully queued, hjPhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubh if it was already pending.}(h if it was already pending.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*kthread_delayed_work_timer_fn (C function)c.kthread_delayed_work_timer_fnhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkthread_delayed_work_timer_fnh]h)}(hkthread_delayed_work_timer_fnh]hkthread_delayed_work_timer_fn}(hhhj"hhhNhNubah}(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}(hhhj>hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj:ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubh)}(hhh]h)}(h timer_listh]h timer_list}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]jj)}j]j$sbc.kthread_delayed_work_timer_fnasbuh1hhj:ubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubh)}(hjZuh]ht}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/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&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to the expired timerh]hpointer to the expired timer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj=h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubj6)}(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.}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'kthread_queue_delayed_work (C function)c.kthread_queue_delayed_workhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMIubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~hhhjhMIubh)}(hkthread_queue_delayed_workh]h)}(hkthread_queue_delayed_workh]hkthread_queue_delayed_work}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhjhMIubj)}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j$)}(hstruct kthread_worker *workerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_queue_delayed_workasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkerh]hworker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h"struct kthread_delayed_work *dworkh](j')}(hj*h]hstruct}(hhhj0hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj,ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjPmodnameN classnameNjajd)}jg]jc.kthread_queue_delayed_workasbuh1hhj,ubj9)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hdworkh]hdwork}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hdelayh]hdelay}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj~hhhjhMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjhMIubah}(h]juah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMVhjwhhubj)}(hhh]j6)}(h0queue the associated kthread work after a delay.h]h0queue the associated kthread work after a delay.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMHhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMIubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj%h]h Parameters}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLhjubj)}(hhh](j)}(h8``struct kthread_worker *worker`` target kthread_worker h](j)}(h!``struct kthread_worker *worker``h]j<)}(hjDh]hstruct kthread_worker *worker}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMJhj>ubj)}(hhh]j6)}(htarget kthread_workerh]htarget kthread_worker}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhMJhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMJhj;ubj)}(hE``struct kthread_delayed_work *dwork`` kthread_delayed_work to queue h](j)}(h&``struct kthread_delayed_work *dwork``h]j<)}(hj}h]h"struct kthread_delayed_work *dwork}(hhhjhhhNhNubah}(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.chMKhjwubj)}(hhh]j6)}(hkthread_delayed_work to queueh]hkthread_delayed_work to queue}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMKhj;ubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]j<)}(hjh]hunsigned long delay}(hhhjhhhNhNubah}(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.chMLhjubj)}(hhh]j6)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMNhjubj6)}(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 }(h\If the work has not been pending it starts a timer that will queue the work after the given hjhhhNhNubjv)}(h **delay**h]hdelay}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh. If }(h. If hjhhhNhNubjv)}(h **delay**h]hdelay}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) is zero, it queues the work immediately.}(h) is zero, it queues the work immediately.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMNhjubj6)}(h **Return**h]jv)}(hj?h]hReturn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj6)}(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}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubh if the }(h if the hjUhhhNhNubjv)}(h**work**h]hwork}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubhi has already been pending. It means that either the timer was running or the work was queued. It returns }(hi has already been pending. It means that either the timer was running or the work was queued. It returns hjUhhhNhNubj<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubh otherwise.}(h otherwise.hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_flush_work (C function)c.kthread_flush_workhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h3void kthread_flush_work (struct kthread_work *work)h]h)}(h2void kthread_flush_work(struct kthread_work *work)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMxubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMxubh)}(hkthread_flush_workh]h)}(hkthread_flush_workh]hkthread_flush_work}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMxubj)}(h(struct kthread_work *work)h]j$)}(hstruct kthread_work *workh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_flush_workasbuh1hhjubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkh]hwork}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMxubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM|hjhhubj)}(hhh]j6)}(hflush a kthread_workh]hflush a kthread_work}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMwhjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(h**Parameters** ``struct kthread_work *work`` work to flush **Description** If **work** is queued or executing, wait for it to finish execution.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM{hjubj)}(hhh]j)}(h,``struct kthread_work *work`` work to flush h](j)}(h``struct kthread_work *work``h]j<)}(hjh]hstruct kthread_work *work}(hhhjhhhNhNubah}(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.chMxhjubj)}(hhh]j6)}(h work to flushh]h work to flush}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMzhjubj6)}(hDIf **work** is queued or executing, wait for it to finish execution.h](hIf }(hIf hj hhhNhNubjv)}(h**work**h]hwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh9 is queued or executing, wait for it to finish execution.}(h9 is queued or executing, wait for it to finish execution.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMzhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kthread_mod_delayed_work (C function)c.kthread_mod_delayed_workhNtauh1hhjfhhhNhNubh)}(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}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKhhhj\hMubh)}(hkthread_mod_delayed_workh]h)}(hkthread_mod_delayed_workh]hkthread_mod_delayed_work}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj\hMubj)}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j$)}(hstruct kthread_worker *workerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jqsbc.kthread_mod_delayed_workasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkerh]hworker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h"struct kthread_delayed_work *dworkh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kthread_mod_delayed_workasbuh1hhjubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdworkh]hdwork}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubh)}(hdelayh]hdelay}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDhhubj)}(hhh]j6)}(h/modify delay of or queue a kthread delayed workh]h/modify delay of or queue a kthread delayed work}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj\hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhjhhhNhNubah}(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.chMhj ubj)}(hhh]j6)}(hkthread worker to useh]hkthread worker to use}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(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<)}(hjJh]h"struct kthread_delayed_work *dwork}(hhhjLhhhNhNubah}(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]j6)}(hkthread delayed work to queueh]hkthread delayed work to queue}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]j<)}(hjh]hunsigned long delay}(hhhjhhhNhNubah}(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.chMhj}ubj)}(hhh]j6)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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 }(hIf hjhhhNhNubjv)}(h **dwork**h]hdwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhH is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify }(hH is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify hjhhhNhNubjv)}(h **dwork**h]hdwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$’s timer so that it expires after }(h"'s timer so that it expires after hjhhhNhNubjv)}(h **delay**h]hdelay}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh. If }(h. If hjhhhNhNubjv)}(h **delay**h]hdelay}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h**work**h]hwork}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh( is guaranteed to be queued immediately.}(h( is guaranteed to be queued immediately.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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 }(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 hjChhhNhNubj<)}(h``true``h]htrue}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCubh 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 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.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(h **Return**h]jv)}(hjwh]hReturn}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(h?``false`` if **dwork** was idle and queued, ``true`` otherwise.h](j<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if }(h if hjhhhNhNubjv)}(h **dwork**h]hdwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was idle and queued, }(h was idle and queued, hjhhhNhNubj<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kthread_cancel_work_sync (C function)c.kthread_cancel_work_synchNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM?ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM?ubh)}(hkthread_cancel_work_synch]h)}(hkthread_cancel_work_synch]hkthread_cancel_work_sync}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM?ubj)}(h(struct kthread_work *work)h]j$)}(hstruct kthread_work *workh](j')}(hj*h]hstruct}(hhhj-hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj)ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_cancel_work_syncasbuh1hhj)ubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(hworkh]hwork}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMhjhhubj)}(hhh]j6)}(h/cancel a kthread work and wait for it to finishh]h/cancel a kthread work and wait for it to finish}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM?ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMBhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hthe kthread work to cancelh]hthe kthread work to cancel}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMAhjubj6)}(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 }(hCancel hjChhhNhNubjv)}(h**work**h]hwork}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, }(h and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, hjChhhNhNubjv)}(h**work**h]hwork}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh9 is guaranteed to be not pending or executing on any CPU.}(h9 is guaranteed to be not pending or executing on any CPU.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMAhjubj6)}(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(}(hkthread_cancel_work_sync(hjyhhhNhNubh)}(h+:c:type:`delayed_work->work `h]j<)}(hjh]hdelayed_work->work}(hhhjhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjjj delayed_workuh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMEhjyubhX) must not be used for delayed_work’s. Use kthread_cancel_delayed_work_sync() instead.}(hV) must not be used for delayed_work's. Use kthread_cancel_delayed_work_sync() instead.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMEhjubj6)}(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 }(h0The caller must ensure that the worker on which hjhhhNhNubjv)}(h**work**h]hwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhC was last queued can’t be destroyed before this function returns.}(hA was last queued can't be destroyed before this function returns.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMHhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMKhjubj6)}(h6``true`` if **work** was pending, ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if }(h if hjhhhNhNubjv)}(h**work**h]hwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was pending, }(h was pending, hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-kthread_cancel_delayed_work_sync (C function)"c.kthread_cancel_delayed_work_synchNtauh1hhjfhhhNhNubh)}(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}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhjYhMUubh)}(h kthread_cancel_delayed_work_synch]h)}(h kthread_cancel_delayed_work_synch]h kthread_cancel_delayed_work_sync}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjYhMUubj)}(h$(struct kthread_delayed_work *dwork)h]j$)}(h"struct kthread_delayed_work *dworkh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jnsb"c.kthread_cancel_delayed_work_syncasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdworkh]hdwork}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjHhhhjYhMUubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjYhMUubah}(h]j?ah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM\hjAhhubj)}(hhh]j6)}(h8cancel a kthread delayed work and wait for it to finish.h]h8cancel a kthread delayed work and wait for it to finish.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMThj hhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhMUubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMXhj(ubj)}(hhh]j)}(hJ``struct kthread_delayed_work *dwork`` the kthread delayed work to cancel h](j)}(h&``struct kthread_delayed_work *dwork``h]j<)}(hjMh]h"struct kthread_delayed_work *dwork}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMVhjGubj)}(hhh]j6)}(h"the kthread delayed work to cancelh]h"the kthread delayed work to cancel}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMVhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMVhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMXhj(ubj6)}(h5This is kthread_cancel_work_sync() for delayed works.h]h5This is kthread_cancel_work_sync() for delayed works.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMXhj(ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMZhj(ubj6)}(h7``true`` if **dwork** was pending, ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if }(h if hjhhhNhNubjv)}(h **dwork**h]hdwork}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was pending, }(h was pending, hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMZhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kthread_flush_worker (C function)c.kthread_flush_workerhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h9void kthread_flush_worker (struct kthread_worker *worker)h]h)}(h8void kthread_flush_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%hhhj7hMdubh)}(hkthread_flush_workerh]h)}(hkthread_flush_workerh]hkthread_flush_worker}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMdubj)}(h(struct kthread_worker *worker)h]j$)}(hstruct kthread_worker *workerh](j')}(hj*h]hstruct}(hhhjfhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjbubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jLsbc.kthread_flush_workerasbuh1hhjbubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbubh)}(hworkerh]hworker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj^ubah}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMdubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMihjhhubj)}(hhh]j6)}(h+flush all current works on a kthread_workerh]h+flush all current works on a kthread_worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMdubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(h**Parameters** ``struct kthread_worker *worker`` worker to flush **Description** Wait until all currently executing or pending works on **worker** are finished.h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghjubj)}(hhh]j)}(h2``struct kthread_worker *worker`` worker to flush h](j)}(h!``struct kthread_worker *worker``h]j<)}(hj+h]hstruct kthread_worker *worker}(hhhj-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.chMdhj%ubj)}(hhh]j6)}(hworker to flushh]hworker to flush}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMdhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMdhj"ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhjubj6)}(hOWait until all currently executing or pending works on **worker** are finished.h](h7Wait until all currently executing or pending works on }(h7Wait until all currently executing or pending works on hj|hhhNhNubjv)}(h **worker**h]hworker}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh are finished.}(h are finished.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kthread_destroy_worker (C function)c.kthread_destroy_workerhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMwubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMwubh)}(hkthread_destroy_workerh]h)}(hkthread_destroy_workerh]hkthread_destroy_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMwubj)}(h(struct kthread_worker *worker)h]j$)}(hstruct kthread_worker *workerh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_destroy_workerasbuh1hhjubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hworkerh]hworker}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMwubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(hdestroy a kthread workerh]hdestroy a kthread worker}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMvhj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMwubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMzhjubj)}(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}(hhhjhhhNhNubah}(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.chMwhjubj)}(hhh]j6)}(hworker to be destroyedh]hworker to be destroyed}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMyhjubj6)}(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 }(hFlush and destroy hjhhhNhNubjv)}(h **worker**h]hworker}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh. 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. 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&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMyhjubj6)}(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.}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_use_mm (C function)c.kthread_use_mmhNtauh1hhjfhhhNhNubh)}(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}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`hhhjrhMubh)}(hkthread_use_mmh]h)}(hkthread_use_mmh]hkthread_use_mm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjrhMubj)}(h(struct mm_struct *mm)h]j$)}(hstruct mm_struct *mmh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_use_mmasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hmmh]hmm}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjYhhubj)}(hhh]j6)}(h4make the calling kthread operate on an address spaceh]h4make the calling kthread operate on an address space}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j=j3j=j4uh1hhhhjfhNhNubjl)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](j6)}(h**Parameters**h]jv)}(hjGh]h Parameters}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjAubj)}(hhh]j)}(h4``struct mm_struct *mm`` address space to operate onh](j)}(h``struct mm_struct *mm``h]j<)}(hjfh]hstruct mm_struct *mm}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj`ubj)}(hhh]j6)}(haddress space to operate onh]haddress space to operate on}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_unuse_mm (C function)c.kthread_unuse_mmhNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkthread_unuse_mmh]h)}(hkthread_unuse_mmh]hkthread_unuse_mm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct mm_struct *mm)h]j$)}(hstruct mm_struct *mmh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kthread_unuse_mmasbuh1hhjubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hmmh]hmm}(hhhjVhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(h&reverse the effect of kthread_use_mm()h]h&reverse the effect of kthread_use_mm()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(haddress space to operate onh]haddress space to operate on}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$kthread_associate_blkcg (C function)c.kthread_associate_blkcghNtauh1hhjfhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj*hMubh)}(hkthread_associate_blkcgh]h)}(hkthread_associate_blkcgh]hkthread_associate_blkcg}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj*hMubj)}(h!(struct cgroup_subsys_state *css)h]j$)}(hstruct cgroup_subsys_state *cssh](j')}(hj*h]hstruct}(hhhjYhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjUubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjymodnameN classnameNjajd)}jg]jj)}j]j?sbc.kthread_associate_blkcgasbuh1hhjUubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubh)}(hcssh]hcss}(hhhjhhhNhNubah}(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&]juh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubj)}(hhh]j6)}(h"associate blkcg to current kthreadh]h"associate blkcg to current kthread}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/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&]j1j,j2jj3jj4uh1hhhhjfhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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}(hhhj 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.chMhjubj)}(hhh]j6)}(hthe cgroup infoh]hthe cgroup info}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjYh]h Description}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj6)}(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.}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjfhhhNhNubeh}(h]internal-functionsah ]h"]internal functionsah$]h&]uh1hhhhhhhhKFubh)}(hhh](h)}(hReference countingh]hReference counting}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKUubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_set (C function)c.refcount_sethNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKxubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKxubh)}(h refcount_seth]h)}(h refcount_seth]h refcount_set}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKxubj)}(h(refcount_t *r, int n)h](j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.refcount_setasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hrh]hr}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint nh](j)}(hinth]hint}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubh)}(hhh]hn}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKxubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKxubah}(h]jah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhK{hjhhubj)}(hhh]j6)}(hset a refcount's valueh]hset a refcount’s value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKwhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(he**Parameters** ``refcount_t *r`` the refcount ``int n`` value to which the refcount will be seth](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhK{hjubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hjh]h refcount_t *r}(hhhjhhhNhNubah}(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.hhKxhjubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjubj)}(h1``int n`` value to which the refcount will be seth](j)}(h ``int n``h]j<)}(hj h]hint n}(hhhj 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.hhKzhjubj)}(hhh]j6)}(h'value to which the refcount will be seth]h'value to which the refcount will be set}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKyhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKzhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_read (C function)c.refcount_readhNtauh1hhjhhhNhNubh)}(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}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjahhhjshKubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjahhhjshKubh)}(h refcount_readh]h)}(h refcount_readh]h refcount_read}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjshKubj)}(h(const refcount_t *r)h]j$)}(hconst refcount_t *rh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.refcount_readasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjahhhjshKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhjshKubah}(h]jXah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjZhhubj)}(hhh]j6)}(hget a refcount's valueh]hget a refcount’s value}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj>hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jYj3jYj4uh1hhhhjhNhNubjl)}(hX**Parameters** ``const refcount_t *r`` the refcount **Return** the refcount's valueh](j6)}(h**Parameters**h]jv)}(hjch]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj]ubj)}(hhh]j)}(h%``const refcount_t *r`` the refcount h](j)}(h``const refcount_t *r``h]j<)}(hjh]hconst refcount_t *r}(hhhjhhhNhNubah}(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.hhKhj|ubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj]ubj6)}(hthe refcount's valueh]hthe refcount’s value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_add_not_zero (C function)c.refcount_add_not_zerohNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hrefcount_add_not_zeroh]h)}(hrefcount_add_not_zeroh]hrefcount_add_not_zero}(hhhj"hhhNhNubah}(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}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubh)}(hih]hi}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6ubj$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjxmodnameN classnameNjajd)}jg]jj)}j]j$sbc.refcount_add_not_zeroasbuh1hhjoubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjoubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubj)}(hhh]j6)}(h(add a value to a refcount unless it is 0h]h(add a value to a refcount unless it is 0}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/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}(hhhjhhhNhNubah}(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]j6)}(h the value to add to the refcounth]h the value to add to the refcount}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hjUh]h refcount_t *r}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjOubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhKhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(h-Will saturate at REFCOUNT_SATURATED and WARN.h]h-Will saturate at REFCOUNT_SATURATED and WARN.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_add (C function)c.refcount_addhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj(hKubh)}(h refcount_addh]h)}(h refcount_addh]h refcount_add}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hKubj)}(h(int i, refcount_t *r)h](j$)}(hint ih](j)}(hinth]hint}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSubh)}(hj\h]hi}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjOubj$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j=sbc.refcount_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjOubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj(hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hKubah}(h]j ah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubj)}(hhh]j6)}(hadd a value to a refcounth]hadd a value to a refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/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<)}(hj4h]hint i}(hhhj6hhhNhNubah}(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]j6)}(h the value to add to the refcounth]h the value to add to the refcount}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj+ubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hjmh]h refcount_t *r}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_inc_not_zero (C function)c.refcount_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hrefcount_inc_not_zeroh]h)}(hrefcount_inc_not_zeroh]hrefcount_inc_not_zero}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jj)}j]j-sbc.refcount_inc_not_zeroasbuh1hhjCubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCubj~)}(hjh]h*}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjCubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(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&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubj)}(hhh]j6)}(h#increment a refcount unless it is 0h]h#increment a refcount unless it is 0}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]j<)}(hjh]h refcount_t *r}(hhhjhhhNhNubah}(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]j6)}(hthe refcount to incrementh]hthe refcount to increment}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(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.}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(h **Return**h]jv)}(hjah]hReturn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj6)}(h5true if the increment was successful, false otherwiseh]h5true if the increment was successful, false otherwise}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_inc (C function)c.refcount_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void refcount_inc (refcount_t *r)h]h)}(h void refcount_inc(refcount_t *r)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(h refcount_inch]h)}(h refcount_inch]h refcount_inc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.refcount_incasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhj!hhhNhNubah}(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&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubj)}(hhh]j6)}(hincrement a refcounth]hincrement a refcount}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]j<)}(hjh]h refcount_t *r}(hhhjhhhNhNubah}(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]j6)}(hthe refcount to incrementh]hthe refcount to increment}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_sub_and_test (C function)c.refcount_sub_and_testhNtauh1hhjhhhNhNubh)}(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}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&hhhj7hMubh)}(hrefcount_sub_and_testh]h)}(hrefcount_sub_and_testh]hrefcount_sub_and_test}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj7hMubj)}(h(int i, refcount_t *r)h](j$)}(hint ih](j)}(hinth]hint}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj^ubj$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jLsbc.refcount_sub_and_testasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhjhhhNhNubah}(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&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM,hjhhubj)}(hhh]j6)}(h,subtract from a refcount and test if it is 0h]h,subtract from a refcount and test if it is 0}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hZ/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<)}(hjCh]hint i}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj=ubj)}(hhh]j6)}(h$amount to subtract from the refcounth]h$amount to subtract from the refcount}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hj|h]h refcount_t *r}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjvubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM!hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM%hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM*hjubj6)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_dec_and_test (C function)c.refcount_dec_and_testhNtauh1hhjhhhNhNubh)}(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}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM8ubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=hhhjNhM8ubh)}(hrefcount_dec_and_testh]h)}(hrefcount_dec_and_testh]hrefcount_dec_and_test}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjNhM8ubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jcsbc.refcount_dec_and_testasbuh1hhjyubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjuubah}(h]h ]h"]h$]h&]jj uh1jhj=hhhjNhM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjNhM8ubah}(h]j4ah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMChj6hhubj)}(hhh]j6)}(h(decrement a refcount and test if it is 0h]h(decrement a refcount and test if it is 0}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM7hjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjNhM8ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM;hjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hj&h]h refcount_t *r}(hhhj(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.hhM8hj ubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hM8hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM8hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM:hjubj6)}(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.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM:hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM=hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAhjubj6)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_dec (C function)c.refcount_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void refcount_dec (refcount_t *r)h]h)}(h void refcount_dec(refcount_t *r)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMUubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMUubh)}(h refcount_dech]h)}(h refcount_dech]h refcount_dec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMUubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.refcount_decasbuh1hhjubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMUubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMUubah}(h]jah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM]hjhhubj)}(hhh]j6)}(hdecrement a refcounth]hdecrement a refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMThj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMUubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMXhjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hjh]h refcount_t *r}(hhhjhhhNhNubah}(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.hhMUhjubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMWhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMWhjubj6)}(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.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ refcount_dec_if_one (C function)c.refcount_dec_if_onehNtauh1hhjhhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK)ubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMhhhj^hK)ubh)}(hrefcount_dec_if_oneh]h)}(hrefcount_dec_if_oneh]hrefcount_dec_if_one}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhj^hK)ubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jssbc.refcount_dec_if_oneasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj4h]hr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjMhhhj^hK)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj^hK)ubah}(h]jDah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK7hjFhhubj)}(hhh]j6)}(hdecrement a refcount if it is 1h]hdecrement a refcount if it is 1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(hjhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj^hK)ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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<)}(hj6h]h refcount_t *r}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK)hj0ubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhK)hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhK)hj-ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK+hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK+hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK.hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK1hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK5hjubj6)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!refcount_dec_not_one (C function)c.refcount_dec_not_onehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKAubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKAubh)}(hrefcount_dec_not_oneh]h)}(hrefcount_dec_not_oneh]hrefcount_dec_not_one}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKAubj)}(h(refcount_t *r)h]j$)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<modnameN classnameNjajd)}jg]jj)}j]jsbc.refcount_dec_not_oneasbuh1hhj3ubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubj~)}(hjh]h*}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3ubh)}(hj4h]hr}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj/ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKAubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKJhjhhubj)}(hhh]j6)}(h#decrement a refcount if it is not 1h]h#decrement a refcount if it is not 1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK@hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKAubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKDhjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j<)}(hjh]h refcount_t *r}(hhhjhhhNhNubah}(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.chKAhjubj)}(hhh]j6)}(h the refcounth]h the refcount}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKChjubj6)}(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.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKChjubj6)}(hhK7ubh)}(h atomic_seth]h)}(h atomic_seth]h atomic_set}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hK7ubj)}(h(atomic_t *v, int i)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjrmodnameN classnameNjajd)}jg]jj)}j]jSsb c.atomic_setasbuh1hhjiubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjiubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjeubj$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjeubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hK7ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hK7ubah}(h]j#ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK@hj%hhubj)}(hhh]j6)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6hj hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hK7ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j! j3j! j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj+ h]h Parameters}(hhhj- hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj) ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjJ h]h atomic_t *v}(hhhjL hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjH ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK7hjD ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hje hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_ hK7hj` ubah}(h]h ]h"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]uh1jhj_ hK7hjA ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j<)}(hj h]hint i}(hhhj 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.hhK8hj} ubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hK8hj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhj hK8hjA ubeh}(h]h ]h"]h$]h&]uh1jhj% ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj% ubj6)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hAtomically sets hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to }(h to hj hhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh with relaxed ordering.}(h with relaxed ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj% ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj% ubj6)}(hNothing.h]hNothing.}(hj3 hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK>hj% ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_set_release (C function)c.atomic_set_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj` hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKIubj9)}(h h]h }(hhhjo hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\ hhhjn hKIubh)}(hatomic_set_releaseh]h)}(hatomic_set_releaseh]hatomic_set_release}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj} ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\ hhhjn hKIubj)}(h(atomic_t *v, int i)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sbc.atomic_set_releaseasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hint ih](j)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhj\ hhhjn hKIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjX hhhjn hKIubah}(h]jS ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKRhjU hhubj)}(hhh]j6)}(h atomic set with release orderingh]h atomic set with release ordering}(hj; hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHhj6 hhubah}(h]h ]h"]h$]h&]uh1jhjU hhhjn hKIubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jQ j3jQ j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj[ h]h Parameters}(hhhj] hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjY ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhjU ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjz h]h atomic_t *v}(hhhj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjx ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKIhjt ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKIhj ubah}(h]h ]h"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]uh1jhj hKIhjq ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j<)}(hj h]hint i}(hhhj 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]j6)}(hint value to assignh]hint value to assign}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKJhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKJhjq ubeh}(h]h ]h"]h$]h&]uh1jhjU ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhjU ubj6)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hAtomically sets hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to }(h to hj hhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh with release ordering.}(h with release ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhjU ubj6)}(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< hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKNhjU ubj6)}(h **Return**h]jv)}(hjK h]hReturn}(hhhjM hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKPhjU ubj6)}(hNothing.h]hNothing.}(hjc hja hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKPhjU ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add (C function) c.atomic_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK\ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hK\ubh)}(h atomic_addh]h)}(h atomic_addh]h atomic_add}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hK\ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhj 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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sb c.atomic_addasbuh1hhj ubj9)}(h h]h }(hhhj$ hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj? 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 hK\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hK\ubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKehj hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjk hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[hjf hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK\ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hj ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hj h]hint i}(hhhj 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.hhK\hj ubj)}(hhh]j6)}(hint value to addh]hint value to add}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hK\hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK\hj ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj h]h atomic_t *v}(hhhj 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.hhK]hj ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hK]hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK]hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hj ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj4hhhNhNubjv)}(h**v**h]hv}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh to (}(h to (hj4hhhNhNubjv)}(h**v**h]hv}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh + }(h + hj4hhhNhNubjv)}(h**i**h]hi}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh) with relaxed ordering.}(h) with relaxed ordering.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hj ubj6)}(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.}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKahj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKchj ubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKchj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add_return (C function)c.atomic_add_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKnubh)}(hatomic_add_returnh]h)}(hatomic_add_returnh]hatomic_add_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKnubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhj,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}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjImodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_returnasbuh1hhj@ubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKnubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKnubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKwhjhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKnubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKnhjubah}(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<)}(hj&h]h atomic_t *v}(hhhj(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.hhKohj ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hKohj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKohjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjwhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh to (}(h to (hjwhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh + }(h + hjwhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh) with full ordering.}(h) with full ordering.hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKshjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKuhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_acquire (C function)c.atomic_add_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%hhhj7hKubh)}(hatomic_add_return_acquireh]h)}(hatomic_add_return_acquireh]hatomic_add_return_acquire}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj^ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jLsbc.atomic_add_return_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hKubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjCh]hint i}(hhhjEhhhNhNubah}(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.hhKhj=ubj)}(hhh]j6)}(hint value to addh]hint value to add}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhj:ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj|h]h atomic_t *v}(hhhj~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.hhKhjvubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(h **Return**h]jv)}(hj'h]hReturn}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj=hhhNhNubjv)}(h**v**h]hv}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh.}(hjPhj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_release (C function)c.atomic_add_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{hhhjhKubh)}(hatomic_add_return_releaseh]h)}(hatomic_add_return_releaseh]hatomic_add_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjthhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjUhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjtubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj#hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh to (}(h to (hj#hhhNhNubjv)}(h**v**h]hv}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh + }(h + hj#hhhNhNubjv)}(h**i**h]hi}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh) with release ordering.}(h) with release ordering.hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubj6)}(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.}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubj6)}(h **Return**h]jv)}(hj}h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_relaxed (C function)c.atomic_add_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hatomic_add_return_relaxedh]h)}(hatomic_add_return_relaxedh]hatomic_add_return_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_return_relaxedasbuh1hhjBubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBubj~)}(hjh]h*}(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjBubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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<)}(hj(h]h atomic_t *v}(hhhj*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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh to (}(h to (hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh + }(h + hjyhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh) with relaxed ordering.}(h) with relaxed ordering.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_add (C function)c.atomic_fetch_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'hhhj9hKubh)}(hatomic_fetch_addh]h)}(hatomic_fetch_addh]hatomic_fetch_add}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jNsbc.atomic_fetch_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hKubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj hhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjEh]hint i}(hhhjGhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhKhj<ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj~h]h atomic_t *v}(hhhjhhhNhNubah}(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.hhKhjxubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhKhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj6)}(h **Return**h]jv)}(hj)h]hReturn}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj?hhhNhNubjv)}(h**v**h]hv}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubh.}(hjPhj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_acquire (C function)c.atomic_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}hhhjhKubh)}(hatomic_fetch_add_acquireh]h)}(hatomic_fetch_add_acquireh]hatomic_fetch_add_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhjhKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_fetch_add_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj}hhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjhKubah}(h]jtah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jrj3jrj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjvubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj%hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh to (}(h to (hj%hhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh + }(h + hj%hhhNhNubjv)}(h**i**h]hi}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh) with acquire ordering.}(h) with acquire ordering.hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubj6)}(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.}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_release (C function)c.atomic_fetch_add_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hatomic_fetch_add_releaseh]h)}(hatomic_fetch_add_releaseh]hatomic_fetch_add_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_fetch_add_releaseasbuh1hhjDubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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<)}(hj*h]h atomic_t *v}(hhhj,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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjeh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh to (}(h to (hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh + }(h + hj{hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh) with release ordering.}(h) with release ordering.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_relaxed (C function)c.atomic_fetch_add_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)hhhj;hKubh)}(hatomic_fetch_add_relaxedh]h)}(hatomic_fetch_add_relaxedh]hatomic_fetch_add_relaxed}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jPsbc.atomic_fetch_add_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hKubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj"hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj( h]h Parameters}(hhhj* hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj& ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjG h]hint i}(hhhjI 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.hhKhjA ubj)}(hhh]j6)}(hint value to addh]hint value to add}(hjb hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\ hKhj] ubah}(h]h ]h"]h$]h&]uh1jhjA 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<)}(hj h]h atomic_t *v}(hhhj 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.hhKhjz ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj> ubeh}(h]h ]h"]h$]h&]uh1jhj" ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj" ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + }(h + hj hhhNhNubjv)}(h**i**h]hi}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with relaxed ordering.}(h) with relaxed ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj" ubj6)}(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!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj" ubj6)}(h **Return**h]jv)}(hj+!h]hReturn}(hhhj-!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)!ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj" ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjA!hhhNhNubjv)}(h**v**h]hv}(hhhjJ!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjA!ubh.}(hjPhjA!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj" ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_sub (C function) c.atomic_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!hhhj!hMubh)}(h atomic_subh]h)}(h atomic_subh]h atomic_sub}(hhhj!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}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubh)}(hj\h]hi}(hhhj!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}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]j!sb c.atomic_subasbuh1hhj!ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhj%"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hj h]hv}(hhhj2"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]jv!ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjx!hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj^"hj\"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjY"hhubah}(h]h ]h"]h$]h&]uh1jhjx!hhhj!hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jt"j3jt"j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~"h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|"ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx"ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hj"h]hint i}(hhhj"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]j6)}(hint value to subtracth]hint value to subtract}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"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}(hhhj"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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjx"ubj6)}(h**Description**h]jv)}(hj#h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx"ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj'#hhhNhNubjv)}(h**v**h]hv}(hhhj0#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'#ubh to (}(h to (hj'#hhhNhNubjv)}(h**v**h]hv}(hhhjC#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'#ubh - }(h - hj'#hhhNhNubjv)}(h**i**h]hi}(hhhjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'#ubh) with relaxed ordering.}(h) with relaxed ordering.hj'#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx"ubj6)}(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.}(hjr#hjp#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx"ubj6)}(h **Return**h]jv)}(hj#h]hReturn}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjx"ubj6)}(hNothing.h]hNothing.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjx"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_sub_return (C function)c.atomic_sub_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj#hMubh)}(hatomic_sub_returnh]h)}(hatomic_sub_returnh]hatomic_sub_return}(hhhj#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}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubh)}(hj\h]hi}(hhhj$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}(hhhj:$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<$modnameN classnameNjajd)}jg]jj)}j]j#sbc.atomic_sub_returnasbuh1hhj3$ubj9)}(h h]h }(hhhjZ$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3$ubj~)}(hjh]h*}(hhhjh$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3$ubh)}(hj h]hv}(hhhju$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#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj#hMubah}(h]j#ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#hhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj$h]hint i}(hhhj$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]j6)}(hint value to subtracth]hint value to subtract}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$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}(hhhj%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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj4%hj2%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.%hMhj/%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj.%hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj6)}(h**Description**h]jv)}(hjT%h]h Description}(hhhjV%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjR%ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjj%hhhNhNubjv)}(h**v**h]hv}(hhhjs%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj%ubh to (}(h to (hjj%hhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj%ubh - }(h - hjj%hhhNhNubjv)}(h**i**h]hi}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj%ubh) with full ordering.}(h) with full ordering.hjj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj6)}(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.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj6)}(h **Return**h]jv)}(hj%h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj%hhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh.}(hjPhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_acquire (C function)c.atomic_sub_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'ubj9)}(h h]h }(hhhj+&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&hhhj*&hM'ubh)}(hatomic_sub_return_acquireh]h)}(hatomic_sub_return_acquireh]hatomic_sub_return_acquire}(hhhj=&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj*&hM'ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjY&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU&ubj9)}(h h]h }(hhhjg&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjU&ubh)}(hj\h]hi}(hhhju&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjU&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQ&ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&modnameN classnameNjajd)}jg]jj)}j]j?&sbc.atomic_sub_return_acquireasbuh1hhj&ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hj h]hv}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQ&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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj&hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j 'j3j 'j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj'h]h Parameters}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj6'h]hint i}(hhhj8'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.hhM'hj0'ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjQ'hjO'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjK'hM'hjL'ubah}(h]h ]h"]h$]h&]uh1jhj0'ubeh}(h]h ]h"]h$]h&]uh1jhjK'hM'hj-'ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjo'h]h atomic_t *v}(hhhjq'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjm'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hji'ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM(hj'ubah}(h]h ]h"]h$]h&]uh1jhji'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM(hj-'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h**Description**h]jv)}(hj'h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hj'ubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj'hhhNhNubjv)}(h**v**h]hv}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh to (}(h to (hj'hhhNhNubjv)}(h**v**h]hv}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh - }(h - hj'hhhNhNubjv)}(h**i**h]hi}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh) with acquire ordering.}(h) with acquire ordering.hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hj'ubj6)}(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 (hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hj'ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj'ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj0(hhhNhNubjv)}(h**v**h]hv}(hhhj9(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0(ubh.}(hjPhj0(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_release (C function)c.atomic_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjr(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9ubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjn(hhhj(hM9ubh)}(hatomic_sub_return_releaseh]h)}(hatomic_sub_return_releaseh]hatomic_sub_return_release}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjn(hhhj(hM9ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubh)}(hj\h]hi}(hhhj(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}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj(modnameN classnameNjajd)}jg]jj)}j]j(sbc.atomic_sub_return_releaseasbuh1hhj(ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(ubh)}(hj h]hv}(hhhj!)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhjn(hhhj(hM9ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjj(hhhj(hM9ubah}(h]je(ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjg(hhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjM)hjK)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjH)hhubah}(h]h ]h"]h$]h&]uh1jhjg(hhhj(hM9ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jc)j3jc)j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjm)h]h Parameters}(hhhjo)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjk)ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjg)ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hj)h]hint i}(hhhj)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]j6)}(hint value to subtracth]hint value to subtract}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)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}(hhhj)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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hM:hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM:hj)ubeh}(h]h ]h"]h$]h&]uh1jhjg)ubj6)}(h**Description**h]jv)}(hj*h]h Description}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjg)ubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh to (}(h to (hj*hhhNhNubjv)}(h**v**h]hv}(hhhj2*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh - }(h - hj*hhhNhNubjv)}(h**i**h]hi}(hhhjE*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh) with release ordering.}(h) with release ordering.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjg)ubj6)}(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.}(hja*hj_*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjg)ubj6)}(h **Return**h]jv)}(hjp*h]hReturn}(hhhjr*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn*ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjg)ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh.}(hjPhj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjg)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_relaxed (C function)c.atomic_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*hhhj*hMLubh)}(hatomic_sub_return_relaxedh]h)}(hatomic_sub_return_relaxedh]hatomic_sub_return_relaxed}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj*hMLubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubh)}(hj\h]hi}(hhhj!+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}(hhhj<+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>+modnameN classnameNjajd)}jg]jj)}j]j*sbc.atomic_sub_return_relaxedasbuh1hhj5+ubj9)}(h h]h }(hhhj\+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5+ubj~)}(hjh]h*}(hhhjj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5+ubh)}(hj h]hv}(hhhjw+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj*ubeh}(h]h ]h"]h$]h&]jj uh1jhj*hhhj*hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj*hMLubah}(h]j*ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhj*hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hMLubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj+h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hj+h]hint i}(hhhj+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.hhMLhj+ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMLhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMLhj+ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj,h]h atomic_t *v}(hhhj,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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj6,hj4,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0,hMMhj1,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj0,hMMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubj6)}(h**Description**h]jv)}(hjV,h]h Description}(hhhjX,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjT,ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjl,hhhNhNubjv)}(h**v**h]hv}(hhhju,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl,ubh to (}(h to (hjl,hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl,ubh - }(h - hjl,hhhNhNubjv)}(h**i**h]hi}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl,ubh) with relaxed ordering.}(h) with relaxed ordering.hjl,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+ubj6)}(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.}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhj+ubj6)}(h **Return**h]jv)}(hj,h]hReturn}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj+ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj,hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh.}(hjPhj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_sub (C function)c.atomic_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^ubj9)}(h h]h }(hhhj--hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-hhhj,-hM^ubh)}(hatomic_fetch_subh]h)}(hatomic_fetch_subh]hatomic_fetch_sub}(hhhj?-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}(hhhj[-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW-ubj9)}(h h]h }(hhhji-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW-ubh)}(hj\h]hi}(hhhjw-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS-ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}j]jA-sbc.atomic_fetch_subasbuh1hhj-ubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-ubj~)}(hjh]h*}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-ubh)}(hj h]hv}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS-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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghj-hhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j.j3j.j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj8.h]hint i}(hhhj:.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]j6)}(hint value to subtracth]hint value to subtract}(hjS.hjQ.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjM.hM^hjN.ubah}(h]h ]h"]h$]h&]uh1jhj2.ubeh}(h]h ]h"]h$]h&]uh1jhjM.hM^hj/.ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjq.h]h atomic_t *v}(hhhjs.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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.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.ubj6)}(h**Description**h]jv)}(hj.h]h Description}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj.ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj.hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh to (}(h to (hj.hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh - }(h - hj.hhhNhNubjv)}(h**i**h]hi}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh) with full ordering.}(h) with full ordering.hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj.ubj6)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_sub() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_sub() there.}(hj /hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj.ubj6)}(h **Return**h]jv)}(hj/h]hReturn}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj.ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj2/hhhNhNubjv)}(h**v**h]hv}(hhhj;/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2/ubh.}(hjPhj2/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_sub_acquire (C function)c.atomic_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_sub_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_sub_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hhhjt/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp/hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjp/hhhj/hMqubh)}(hatomic_fetch_sub_acquireh]h)}(hatomic_fetch_sub_acquireh]hatomic_fetch_sub_acquire}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp/hhhj/hMqubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/ubh)}(hj\h]hi}(hhhj/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}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/modnameN classnameNjajd)}jg]jj)}j]j/sbc.atomic_fetch_sub_acquireasbuh1hhj/ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/ubj~)}(hjh]h*}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj/ubh)}(hj h]hv}(hhhj#0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj/ubeh}(h]h ]h"]h$]h&]jj uh1jhjp/hhhj/hMqubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl/hhhj/hMqubah}(h]jg/ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhji/hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjO0hjM0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjJ0hhubah}(h]h ]h"]h$]h&]uh1jhji/hhhj/hMqubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2je0j3je0j4uh1hhhhjIhNhNubjl)}(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_fetch_sub_acquire() there. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hjo0h]h Parameters}(hhhjq0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjm0ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthji0ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hj0h]hint i}(hhhj0hhhNhNubah}(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.hhMqhj0ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMqhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMqhj0ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj0h]h atomic_t *v}(hhhj0hhhNhNubah}(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.hhMrhj0ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMrhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMrhj0ubeh}(h]h ]h"]h$]h&]uh1jhji0ubj6)}(h**Description**h]jv)}(hj1h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthji0ubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj1hhhNhNubjv)}(h**v**h]hv}(hhhj!1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh to (}(h to (hj1hhhNhNubjv)}(h**v**h]hv}(hhhj41hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh - }(h - hj1hhhNhNubjv)}(h**i**h]hi}(hhhjG1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh) with acquire ordering.}(h) with acquire ordering.hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthji0ubj6)}(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.}(hjc1hja1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhji0ubj6)}(h **Return**h]jv)}(hjr1h]hReturn}(hhhjt1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp1ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhji0ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj1hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh.}(hjPhj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhji0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_sub_release (C function)c.atomic_fetch_sub_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1hhhj1hMubh)}(hatomic_fetch_sub_releaseh]h)}(hatomic_fetch_sub_releaseh]hatomic_fetch_sub_release}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhj1hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2ubh)}(hj\h]hi}(hhhj#2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj>2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj@2modnameN classnameNjajd)}jg]jj)}j]j1sbc.atomic_fetch_sub_releaseasbuh1hhj72ubj9)}(h h]h }(hhhj^2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj72ubj~)}(hjh]h*}(hhhjl2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj72ubh)}(hj h]hv}(hhhjy2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj72ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubeh}(h]h ]h"]h$]h&]jj uh1jhj1hhhj1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2j3j2j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hj2h]hint i}(hhhj2hhhNhNubah}(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.hhMhj2ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj3h]h atomic_t *v}(hhhj3hhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj83hj63hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj23hMhj33ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj23hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hjX3h]h Description}(hhhjZ3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjV3ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjn3hhhNhNubjv)}(h**v**h]hv}(hhhjw3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn3ubh to (}(h to (hjn3hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn3ubh - }(h - hjn3hhhNhNubjv)}(h**i**h]hi}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn3ubh) with release ordering.}(h) with release ordering.hjn3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj6)}(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.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj6)}(h **Return**h]jv)}(hj3h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj3hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh.}(hjPhj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_sub_relaxed (C function)c.atomic_fetch_sub_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj/4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4hhhj.4hMubh)}(hatomic_fetch_sub_relaxedh]h)}(hatomic_fetch_sub_relaxedh]hatomic_fetch_sub_relaxed}(hhhjA4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhj.4hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj]4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY4ubj9)}(h h]h }(hhhjk4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjY4ubh)}(hj\h]hi}(hhhjy4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjU4ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj4modnameN classnameNjajd)}jg]jj)}j]jC4sbc.atomic_fetch_sub_relaxedasbuh1hhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubj~)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4ubh)}(hj h]hv}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjU4ubeh}(h]h ]h"]h$]h&]jj uh1jhj4hhhj.4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj.4hMubah}(h]j4ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj.4hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj:5h]hint i}(hhhj<5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj85ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj45ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjU5hjS5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjO5hMhjP5ubah}(h]h ]h"]h$]h&]uh1jhj45ubeh}(h]h ]h"]h$]h&]uh1jhjO5hMhj15ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjs5h]h atomic_t *v}(hhhju5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjq5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjm5ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjm5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj15ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj5hhhNhNubjv)}(h**v**h]hv}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh to (}(h to (hj5hhhNhNubjv)}(h**v**h]hv}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh - }(h - hj5hhhNhNubjv)}(h**i**h]hi}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh) with relaxed ordering.}(h) with relaxed ordering.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj6)}(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.}(hj6hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj6)}(h **Return**h]jv)}(hj6h]hReturn}(hhhj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj46hhhNhNubjv)}(h**v**h]hv}(hhhj=6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj46ubh.}(hjPhj46hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_inc (C function) c.atomic_inchNtauh1hhjIhhhNhNubh)}(hhh](h)}(hvoid atomic_inc (atomic_t *v)h]h)}(hvoid atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hhhjv6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjr6hhhj6hMubh)}(h atomic_inch]h)}(h atomic_inch]h atomic_inc}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjr6hhhj6hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj6modnameN classnameNjajd)}jg]jj)}j]j6sb c.atomic_incasbuh1hhj6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6ubh)}(hj h]hv}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6ubah}(h]h ]h"]h$]h&]jj uh1jhjr6hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjn6hhhj6hMubah}(h]ji6ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjk6hhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjk6hhhj6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j37j3j37j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=7h]h Parameters}(hhhj?7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj\7h]h atomic_t *v}(hhhj^7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZ7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjV7ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjw7hju7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjq7hMhjr7ubah}(h]h ]h"]h$]h&]uh1jhjV7ubeh}(h]h ]h"]h$]h&]uh1jhjq7hMhjS7ubah}(h]h ]h"]h$]h&]uh1jhj77ubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj7hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh to (}(h to (hj7hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubj6)}(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.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubj6)}(h **Return**h]jv)}(hj7h]hReturn}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubj6)}(hNothing.h]hNothing.}(hj 8hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj77ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_inc_return (C function)c.atomic_inc_returnhNtauh1hhjIhhhNhNubh)}(hhh](h)}(h#int atomic_inc_return (atomic_t *v)h]h)}(h"int atomic_inc_return(atomic_t *v)h](j)}(hinth]hint}(hhhj98hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj58hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjH8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj58hhhjG8hMubh)}(hatomic_inc_returnh]h)}(hatomic_inc_returnh]hatomic_inc_return}(hhhjZ8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj58hhhjG8hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjy8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{8modnameN classnameNjajd)}jg]jj)}j]j\8sbc.atomic_inc_returnasbuh1hhjr8ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjr8ubj~)}(hjh]h*}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjr8ubh)}(hj h]hv}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjn8ubah}(h]h ]h"]h$]h&]jj uh1jhj58hhhjG8hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj18hhhjG8hMubah}(h]j,8ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.8hhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj.8hhhjG8hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj9h]h atomic_t *v}(hhhj!9hhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj:9hj89hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj49hMhj59ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj49hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hjZ9h]h Description}(hhhj\9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjX9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjp9hhhNhNubjv)}(h**v**h]hv}(hhhjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp9ubh to (}(h to (hjp9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp9ubh + 1) with full ordering.}(h + 1) with full ordering.hjp9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh.}(hjPhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_acquire (C function)c.atomic_inc_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj :hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj :hhhj:hMubh)}(hatomic_inc_return_acquireh]h)}(hatomic_inc_return_acquireh]hatomic_inc_return_acquire}(hhhj0: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}(hhhjO:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjQ:modnameN classnameNjajd)}jg]jj)}j]j2:sbc.atomic_inc_return_acquireasbuh1hhjH:ubj9)}(h h]h }(hhhjo:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjH:ubj~)}(hjh]h*}(hhhj}:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjH:ubh)}(hj h]hv}(hhhj: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:hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj:hMubah}(h]j:ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:hhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j:j3j:j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj:h]h Parameters}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj: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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ;hMhj ;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj ;hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubj6)}(h**Description**h]jv)}(hj0;h]h Description}(hhhj2;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.;ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjF;hhhNhNubjv)}(h**v**h]hv}(hhhjO;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF;ubh to (}(h to (hjF;hhhNhNubjv)}(h**v**h]hv}(hhhjb;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF;ubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjF;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj6)}(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~;hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj6)}(h **Return**h]jv)}(hj;h]hReturn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh.}(hjPhj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_release (C function)c.atomic_inc_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj;hhhj;hMubh)}(hatomic_inc_return_releaseh]h)}(hatomic_inc_return_releaseh]hatomic_inc_return_release}(hhhj<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}(hhhj%<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'<modnameN classnameNjajd)}jg]jj)}j]j<sbc.atomic_inc_return_releaseasbuh1hhj<ubj9)}(h h]h }(hhhjE<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<ubj~)}(hjh]h*}(hhhjS<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj<ubh)}(hj h]hv}(hhhj`<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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;hhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j<j3j<j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj<h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj<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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubj6)}(h**Description**h]jv)}(hj=h]h Description}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hj=hhhNhNubjv)}(h**v**h]hv}(hhhj%=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh to (}(h to (hj=hhhNhNubjv)}(h**v**h]hv}(hhhj8=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh + 1) with release ordering.}(h + 1) with release ordering.hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj6)}(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.}(hjT=hjR=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj6)}(h **Return**h]jv)}(hjc=h]hReturn}(hhhje=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja=ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjy=hhhNhNubjv)}(h**v**h]hv}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjy=ubh.}(hjPhjy=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_relaxed (C function)c.atomic_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=hhhj=hMubh)}(hatomic_inc_return_relaxedh]h)}(hatomic_inc_return_relaxedh]hatomic_inc_return_relaxed}(hhhj=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}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=modnameN classnameNjajd)}jg]jj)}j]j=sbc.atomic_inc_return_relaxedasbuh1hhj=ubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubj~)}(hjh]h*}(hhhj)>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=ubh)}(hj h]hv}(hhhj6>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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=hhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjb>hj`>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jx>j3jx>j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj>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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj|>ubj6)}(h**Description**h]jv)}(hj>h]h Description}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|>ubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh to (}(h to (hj>hhhNhNubjv)}(h**v**h]hv}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|>ubj6)}(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*?hj(?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|>ubj6)}(h **Return**h]jv)}(hj9?h]hReturn}(hhhj;?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7?ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|>ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjO?hhhNhNubjv)}(h**v**h]hv}(hhhjX?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjO?ubh.}(hjPhjO?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_inc (C function)c.atomic_fetch_inchNtauh1hhjIhhhNhNubh)}(hhh](h)}(h"int atomic_fetch_inc (atomic_t *v)h]h)}(h!int atomic_fetch_inc(atomic_t *v)h](j)}(hinth]hint}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?hhhj?hMubh)}(hatomic_fetch_inch]h)}(hatomic_fetch_inch]hatomic_fetch_inc}(hhhj?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}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jj)}j]j?sbc.atomic_fetch_incasbuh1hhj?ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?ubh)}(hj h]hv}(hhhj @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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?hhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj8@hj6@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jN@j3jN@j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjX@h]h Parameters}(hhhjZ@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjV@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjw@h]h atomic_t *v}(hhhjy@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.hhMhjq@ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhjq@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjn@ubah}(h]h ]h"]h$]h&]uh1jhjR@ubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh to (}(h to (hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh + 1) with full ordering.}(h + 1) with full ordering.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubj6)}(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.}(hjAhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubj6)}(h **Return**h]jv)}(hjAh]hReturn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Aubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj%AhhhNhNubjv)}(h**v**h]hv}(hhhj.AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%Aubh.}(hjPhj%AhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjR@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_acquire (C function)c.atomic_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjgAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjvAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcAhhhjuAhMubh)}(hatomic_fetch_inc_acquireh]h)}(hatomic_fetch_inc_acquireh]hatomic_fetch_inc_acquire}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjcAhhhjuAhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jj)}j]jAsbc.atomic_fetch_inc_acquireasbuh1hhjAubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubj~)}(hjh]h*}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjAubh)}(hj h]hv}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubah}(h]h ]h"]h$]h&]jj uh1jhjcAhhhjuAhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_AhhhjuAhMubah}(h]jZAah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\Ahhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjBhj BhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj Bhhubah}(h]h ]h"]h$]h&]uh1jhj\AhhhjuAhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$Bj3j$Bj4uh1hhhhjIhNhNubjl)}(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_inc_acquire() there. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hj.Bh]h Parameters}(hhhj0BhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,Bubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjMBh]h atomic_t *v}(hhhjOBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGBubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhBhjfBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbBhMhjcBubah}(h]h ]h"]h$]h&]uh1jhjGBubeh}(h]h ]h"]h$]h&]uh1jhjbBhMhjDBubah}(h]h ]h"]h$]h&]uh1jhj(Bubj6)}(h**Description**h]jv)}(hjBh]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjBhhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh to (}(h to (hjBhhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubj6)}(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.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubj6)}(h **Return**h]jv)}(hjBh]hReturn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjBhhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh.}(hjPhjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_release (C function)c.atomic_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj=ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Chhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"ubj9)}(h h]h }(hhhjLChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ChhhjKChM"ubh)}(hatomic_fetch_inc_releaseh]h)}(hatomic_fetch_inc_releaseh]hatomic_fetch_inc_release}(hhhj^ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9ChhhjKChM"ubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj}ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjCmodnameN classnameNjajd)}jg]jj)}j]j`Csbc.atomic_fetch_inc_releaseasbuh1hhjvCubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvCubj~)}(hjh]h*}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjvCubh)}(hj h]hv}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvCubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrCubah}(h]h ]h"]h$]h&]jj uh1jhj9ChhhjKChM"ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5ChhhjKChM"ubah}(h]j0Cah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hj2Chhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjChhubah}(h]h ]h"]h$]h&]uh1jhj2ChhhjKChM"ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jCj3jCj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjDh]h Parameters}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj#Dh]h atomic_t *v}(hhhj%DhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!Dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjDubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj>DhjAtomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjtDhhhNhNubjv)}(h**v**h]hv}(hhhj}DhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtDubh to (}(h to (hjtDhhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtDubh + 1) with release ordering.}(h + 1) with release ordering.hjtDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjCubj6)}(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.}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hjCubj6)}(h **Return**h]jv)}(hjDh]hReturn}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjCubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjDhhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh.}(hjPhjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_relaxed (C function)c.atomic_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4ubj9)}(h h]h }(hhhj"EhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEhhhj!EhM4ubh)}(hatomic_fetch_inc_relaxedh]h)}(hatomic_fetch_inc_relaxedh]hatomic_fetch_inc_relaxed}(hhhj4EhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0Eubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhj!EhM4ubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjSEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPEubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUEmodnameN classnameNjajd)}jg]jj)}j]j6Esbc.atomic_fetch_inc_relaxedasbuh1hhjLEubj9)}(h h]h }(hhhjsEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLEubj~)}(hjh]h*}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLEubh)}(hj h]hv}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjHEubah}(h]h ]h"]h$]h&]jj uh1jhjEhhhj!EhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj Ehhhj!EhM4ubah}(h]jEah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjEhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjEhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj!EhM4ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jEj3jEj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjEubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjEh]h atomic_t *v}(hhhjEhhhNhNubah}(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.hhM4hjEubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhM4hjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhM4hjEubah}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hj4Fh]h Description}(hhhj6FhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2Fubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjEubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjJFhhhNhNubjv)}(h**v**h]hv}(hhhjSFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJFubh to (}(h to (hjJFhhhNhNubjv)}(h**v**h]hv}(hhhjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJFubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjJFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjEubj6)}(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.}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjEubj6)}(h **Return**h]jv)}(hjFh]hReturn}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjEubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjFhhhNhNubjv)}(h**v**h]hv}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh.}(hjPhjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_dec (C function) c.atomic_dechNtauh1hhjIhhhNhNubh)}(hhh](h)}(hvoid atomic_dec (atomic_t *v)h]h)}(hvoid atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFhhhjFhMEubh)}(h atomic_dech]h)}(h atomic_dech]h atomic_dec}(hhhj GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjFhMEubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj)GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&Gubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+GmodnameN classnameNjajd)}jg]jj)}j]j Gsb c.atomic_decasbuh1hhj"Gubj9)}(h h]h }(hhhjIGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"Gubj~)}(hjh]h*}(hhhjWGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"Gubh)}(hj h]hv}(hhhjdGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Gubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjGubah}(h]h ]h"]h$]h&]jj uh1jhjFhhhjFhMEubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjFhMEubah}(h]jFah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjFhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjGhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjFhMEubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jGj3jGj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjGh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjGh]h atomic_t *v}(hhhjGhhhNhNubah}(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.hhMEhjGubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhMEhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMEhjGubah}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hj Hh]h Description}(hhhj HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjGubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj HhhhNhNubjv)}(h**v**h]hv}(hhhj)HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Hubh to (}(h to (hj HhhhNhNubjv)}(h**v**h]hv}(hhhjAtomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh to (}(h to (hjKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjCKubj6)}(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.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjCKubj6)}(h **Return**h]jv)}(hjLh]hReturn}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjCKubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjLhhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh.}(hjPhjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjCKubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_dec_return_release (C function)c.atomic_dec_return_releasehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h+int atomic_dec_return_release (atomic_t *v)h]h)}(h*int atomic_dec_return_release(atomic_t *v)h](j)}(hinth]hint}(hhhjXLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTLhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyubj9)}(h h]h }(hhhjgLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTLhhhjfLhMyubh)}(hatomic_dec_return_releaseh]h)}(hatomic_dec_return_releaseh]hatomic_dec_return_release}(hhhjyLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjTLhhhjfLhMyubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jj)}j]j{Lsbc.atomic_dec_return_releaseasbuh1hhjLubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLubj~)}(hjh]h*}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLubh)}(hj h]hv}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubah}(h]h ]h"]h$]h&]jj uh1jhjTLhhhjfLhMyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPLhhhjfLhMyubah}(h]jKLah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMLhhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjLhhubah}(h]h ]h"]h$]h&]uh1jhjMLhhhjfLhMyubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhjIhNhNubjl)}(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_dec_return_release() there. **Return** The updated value of **v**.h](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjMubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj>Mh]h atomic_t *v}(hhhj@MhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAtomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh to (}(h to (hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh - 1) with release ordering.}(h - 1) with release ordering.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjMubj6)}(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.}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjMubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh.}(hjPhjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_dec_return_relaxed (C function)c.atomic_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj.NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Nhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj=NhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*NhhhjAtomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjeOhhhNhNubjv)}(h**v**h]hv}(hhhjnOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeOubh to (}(h to (hjeOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeOubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjeOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj6)}(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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj6)}(h **Return**h]jv)}(hjOh]hReturn}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh.}(hjPhjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_dec (C function)c.atomic_fetch_dechNtauh1hhjIhhhNhNubh)}(hhh](h)}(h"int atomic_fetch_dec (atomic_t *v)h]h)}(h!int atomic_fetch_dec(atomic_t *v)h](j)}(hinth]hint}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPhhhjPhMubh)}(hatomic_fetch_dech]h)}(hatomic_fetch_dech]hatomic_fetch_dec}(hhhj%PhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!Pubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjPhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjDPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjFPmodnameN classnameNjajd)}jg]jj)}j]j'Psbc.atomic_fetch_decasbuh1hhj=Pubj9)}(h h]h }(hhhjdPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=Pubj~)}(hjh]h*}(hhhjrPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=Pubh)}(hj h]hv}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=Pubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj9Pubah}(h]h ]h"]h$]h&]jj uh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjPhMubah}(h]jOah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOhhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjPhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjPh]h atomic_t *v}(hhhjPhhhNhNubah}(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.hhMhjPubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubj6)}(h**Description**h]jv)}(hj%Qh]h Description}(hhhj'QhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#Qubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hj;QhhhNhNubjv)}(h**v**h]hv}(hhhjDQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;Qubh to (}(h to (hj;QhhhNhNubjv)}(h**v**h]hv}(hhhjWQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;Qubh - 1) with full ordering.}(h - 1) with full ordering.hj;QhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj6)}(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.}(hjsQhjqQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj6)}(h **Return**h]jv)}(hjQh]hReturn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh.}(hjPhjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_acquire (C function)c.atomic_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQhhhjQhMubh)}(hatomic_fetch_dec_acquireh]h)}(hatomic_fetch_dec_acquireh]hatomic_fetch_dec_acquire}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjQhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjRmodnameN classnameNjajd)}jg]jj)}j]jQsbc.atomic_fetch_dec_acquireasbuh1hhjRubj9)}(h h]h }(hhhj:RhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubj~)}(hjh]h*}(hhhjHRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRubh)}(hj h]hv}(hhhjURhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjRubah}(h]h ]h"]h$]h&]jj uh1jhjQhhhjQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjQhMubah}(h]jQah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQhhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|Rhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jRj3jRj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjRh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjRhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubj6)}(h**Description**h]jv)}(hjRh]h Description}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjShhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh to (}(h to (hjShhhNhNubjv)}(h**v**h]hv}(hhhj-ShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj6)}(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.}(hjIShjGShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj6)}(h **Return**h]jv)}(hjXSh]hReturn}(hhhjZShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVSubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjnShhhNhNubjv)}(h**v**h]hv}(hhhjwShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnSubh.}(hjPhjnShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_release (C function)c.atomic_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjShhhjShMubh)}(hatomic_fetch_dec_releaseh]h)}(hatomic_fetch_dec_releaseh]hatomic_fetch_dec_release}(hhhjShhhNhNubah}(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}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjSmodnameN classnameNjajd)}jg]jj)}j]jSsbc.atomic_fetch_dec_releaseasbuh1hhjSubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSubj~)}(hjh]h*}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjSubh)}(hj h]hv}(hhhj+ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubah}(h]h ]h"]h$]h&]jj uh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjShhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjWThjUThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmTj3jmTj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwTh]h Parameters}(hhhjyThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjTh]h atomic_t *v}(hhhjThhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjqTubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjThhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh to (}(h to (hjThhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh - 1) with release ordering.}(h - 1) with release ordering.hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubj6)}(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.}(hjUhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubj6)}(h **Return**h]jv)}(hj.Uh]hReturn}(hhhj0UhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,Uubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjDUhhhNhNubjv)}(h**v**h]hv}(hhhjMUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDUubh.}(hjPhjDUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_relaxed (C function)c.atomic_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUhhhjUhMubh)}(hatomic_fetch_dec_relaxedh]h)}(hatomic_fetch_dec_relaxedh]hatomic_fetch_dec_relaxed}(hhhjUhhhNhNubah}(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}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jj)}j]jUsbc.atomic_fetch_dec_relaxedasbuh1hhjUubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubj~)}(hjh]h*}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubh)}(hj h]hv}(hhhjVhhhNhNubah}(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 juh1hjjhj~UhhhjUhMubah}(h]jyUah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{Uhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj-Vhj+VhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Vhhubah}(h]h ]h"]h$]h&]uh1jhj{UhhhjUhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jCVj3jCVj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjMVh]h Parameters}(hhhjOVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKVubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjlVh]h atomic_t *v}(hhhjnVhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfVubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjfVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjcVubah}(h]h ]h"]h$]h&]uh1jhjGVubj6)}(h**Description**h]jv)}(hjVh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjVhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh to (}(h to (hjVhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubj6)}(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.}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubj6)}(h **Return**h]jv)}(hjWh]hReturn}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjWhhhNhNubjv)}(h**v**h]hv}(hhhj#WhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh.}(hjPhjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_and (C function) c.atomic_andhNtauh1hhjIhhhNhNubh)}(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}(hhhj\WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjkWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXWhhhjjWhMubh)}(h atomic_andh]h)}(h atomic_andh]h atomic_and}(hhhj}WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXWhhhjjWhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubh)}(hj\h]hi}(hhhjWhhhNhNubah}(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}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWmodnameN classnameNjajd)}jg]jj)}j]jWsb c.atomic_andasbuh1hhjWubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubj~)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjWubh)}(hj h]hv}(hhhj XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubeh}(h]h ]h"]h$]h&]jj uh1jhjXWhhhjjWhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjTWhhhjjWhMubah}(h]jOWah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQWhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj7Xhj5XhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2Xhhubah}(h]h ]h"]h$]h&]uh1jhjQWhhhjjWhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jMXj3jMXj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjWXh]h Parameters}(hhhjYXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUXubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjvXh]hint i}(hhhjxXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpXubj)}(hhh]j6)}(h int valueh]h int value}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjpXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjmXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjXh]h atomic_t *v}(hhhjXhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjmXubeh}(h]h ]h"]h$]h&]uh1jhjQXubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjYhhhNhNubjv)}(h**v**h]hv}(hhhj YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh to (}(h to (hjYhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh & }(h & hjYhhhNhNubjv)}(h**i**h]hi}(hhhj/YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh) with relaxed ordering.}(h) with relaxed ordering.hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubj6)}(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.}(hjKYhjIYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubj6)}(h **Return**h]jv)}(hjZYh]hReturn}(hhhj\YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXYubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubj6)}(hNothing.h]hNothing.}(hjrYhjpYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_and (C function)c.atomic_fetch_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYhhhjYhMubh)}(hatomic_fetch_andh]h)}(hatomic_fetch_andh]hatomic_fetch_and}(hhhjYhhhNhNubah}(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}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubh)}(hj\h]hi}(hhhjYhhhNhNubah}(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}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjZmodnameN classnameNjajd)}jg]jj)}j]jYsbc.atomic_fetch_andasbuh1hhj Zubj9)}(h h]h }(hhhj3ZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj Zubj~)}(hjh]h*}(hhhjAZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj Zubh)}(hj h]hv}(hhhjNZhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjYhhubj)}(hhh]j6)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjzZhjxZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjZhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhMhjZubah}(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<)}(hjZh]h atomic_t *v}(hhhjZhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj [hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hj-[h]h Description}(hhhj/[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+[ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj6)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjC[hhhNhNubjv)}(h**v**h]hv}(hhhjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC[ubh to (}(h to (hjC[hhhNhNubjv)}(h**v**h]hv}(hhhj_[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC[ubh & }(h & hjC[hhhNhNubjv)}(h**i**h]hi}(hhhjr[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC[ubh) with full ordering.}(h) with full ordering.hjC[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj6)}(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[hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj6)}(h **Return**h]jv)}(hj[h]hReturn}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj[hhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh.}(hjPhj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_acquire (C function)c.atomic_fetch_and_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[hhhj\hMubh)}(hatomic_fetch_and_acquireh]h)}(hatomic_fetch_and_acquireh]hatomic_fetch_and_acquire}(hhhj\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}(hhhj2\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.\ubj9)}(h h]h }(hhhj@\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.\ubh)}(hj\h]hi}(hhhjN\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}(hhhji\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf\ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjk\modnameN classnameNjajd)}jg]jj)}j]j\sbc.atomic_fetch_and_acquireasbuh1hhjb\ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjb\ubj~)}(hjh]h*}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjb\ubh)}(hj h]hv}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb\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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[hhubj)}(hhh]j6)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j\j3j\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj]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]j6)}(h int valueh]h int value}(hj*]hj(]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$]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<)}(hjH]h]h atomic_t *v}(hhhjJ]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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjc]hja]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]]hMhj^]ubah}(h]h ]h"]h$]h&]uh1jhjB]ubeh}(h]h ]h"]h$]h&]uh1jhj]]hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hj]h]h Description}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj6)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh to (}(h to (hj]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh & }(h & hj]hhhNhNubjv)}(h**i**h]hi}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh) with acquire ordering.}(h) with acquire ordering.hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj6)}(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]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj6)}(h **Return**h]jv)}(hj]h]hReturn}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj ^hhhNhNubjv)}(h**v**h]hv}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ^ubh.}(hjPhj ^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_release (C function)c.atomic_fetch_and_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjK^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjZ^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjG^hhhjY^hMubh)}(hatomic_fetch_and_releaseh]h)}(hatomic_fetch_and_releaseh]hatomic_fetch_and_release}(hhhjl^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjG^hhhjY^hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubh)}(hj\h]hi}(hhhj^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}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]jj)}j]jn^sbc.atomic_fetch_and_releaseasbuh1hhj^ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubj~)}(hjh]h*}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^ubh)}(hj h]hv}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhjG^hhhjY^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjC^hhhjY^hMubah}(h]j>^ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hj@^hhubj)}(hhh]j6)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj&_hj$_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!_hhubah}(h]h ]h"]h$]h&]uh1jhj@^hhhjY^hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j<_j3j<_j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjF_h]h Parameters}(hhhjH_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjD_ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@_ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hje_h]hint i}(hhhjg_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]j6)}(h int valueh]h int value}(hj_hj~_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjz_hMhj{_ubah}(h]h ]h"]h$]h&]uh1jhj__ubeh}(h]h ]h"]h$]h&]uh1jhjz_hMhj\_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj_h]h atomic_t *v}(hhhj_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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj\_ubeh}(h]h ]h"]h$]h&]uh1jhj@_ubj6)}(h**Description**h]jv)}(hj_h]h Description}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@_ubj6)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj_hhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh to (}(h to (hj_hhhNhNubjv)}(h**v**h]hv}(hhhj `hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh & }(h & hj_hhhNhNubjv)}(h**i**h]hi}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh) with release ordering.}(h) with release ordering.hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@_ubj6)}(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.}(hj:`hj8`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@_ubj6)}(h **Return**h]jv)}(hjI`h]hReturn}(hhhjK`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG`ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj@_ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj_`hhhNhNubjv)}(h**v**h]hv}(hhhjh`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_`ubh.}(hjPhj_`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj@_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_relaxed (C function)c.atomic_fetch_and_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`hhhj`hM,ubh)}(hatomic_fetch_and_relaxedh]h)}(hatomic_fetch_and_relaxedh]hatomic_fetch_and_relaxed}(hhhj`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}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`ubh)}(hj\h]hi}(hhhj`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}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]jj)}j]j`sbc.atomic_fetch_and_relaxedasbuh1hhjaubj9)}(h h]h }(hhhj5ahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubj~)}(hjh]h*}(hhhjCahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjaubh)}(hj h]hv}(hhhjPahhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj`hhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj|ahjzahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjwahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hM,ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jaj3jaj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjah]h Parameters}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjahhhNhNubah}(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]j6)}(h int valueh]h int value}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahM,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}(hhhjahhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjbhj bhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj bhM-hj bubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj bhM-hjaubeh}(h]h ]h"]h$]h&]uh1jhjaubj6)}(h**Description**h]jv)}(hj/bh]h Description}(hhhj1bhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-bubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjaubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjEbhhhNhNubjv)}(h**v**h]hv}(hhhjNbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEbubh to (}(h to (hjEbhhhNhNubjv)}(h**v**h]hv}(hhhjabhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEbubh & }(h & hjEbhhhNhNubjv)}(h**i**h]hi}(hhhjtbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEbubh) with relaxed ordering.}(h) with relaxed ordering.hjEbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjaubj6)}(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.}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjaubj6)}(h **Return**h]jv)}(hjbh]hReturn}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjaubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjbhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh.}(hjPhjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_andnot (C function)c.atomic_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>ubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbhhhjchM>ubh)}(h atomic_andnoth]h)}(h atomic_andnoth]h atomic_andnot}(hhhjchhhNhNubah}(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}(hhhj4chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0cubj9)}(h h]h }(hhhjBchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0cubh)}(hj\h]hi}(hhhjPchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0cubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,cubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjkchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmcmodnameN classnameNjajd)}jg]jj)}j]jcsbc.atomic_andnotasbuh1hhjdcubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdcubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdcubh)}(hj h]hv}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdcubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjbhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jcj3jcj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjch]h Parameters}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjdhhhNhNubah}(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]j6)}(h int valueh]h int value}(hj,dhj*dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&dhM>hj'dubah}(h]h ]h"]h$]h&]uh1jhj dubeh}(h]h ]h"]h$]h&]uh1jhj&dhM>hjdubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjJdh]h atomic_t *v}(hhhjLdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjDdubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjedhjcdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_dhM?hj`dubah}(h]h ]h"]h$]h&]uh1jhjDdubeh}(h]h ]h"]h$]h&]uh1jhj_dhM?hjdubeh}(h]h ]h"]h$]h&]uh1jhjcubj6)}(h**Description**h]jv)}(hjdh]h Description}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjdhhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh to (}(h to (hjdhhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh & }(h & hjdhhhNhNubjv)}(h**~i**h]h~i}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh) with relaxed ordering.}(h) with relaxed ordering.hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubj6)}(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.}(hjdhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjcubj6)}(h **Return**h]jv)}(hjdh]hReturn}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjcubj6)}(hNothing.h]hNothing.}(hj ehj ehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_fetch_andnot (C function)c.atomic_fetch_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhj:ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPubj9)}(h h]h }(hhhjIehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ehhhjHehMPubh)}(hatomic_fetch_andnoth]h)}(hatomic_fetch_andnoth]hatomic_fetch_andnot}(hhhj[ehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWeubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6ehhhjHehMPubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjwehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjseubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjseubh)}(hj\h]hi}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjseubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoeubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjemodnameN classnameNjajd)}jg]jj)}j]j]esbc.atomic_fetch_andnotasbuh1hhjeubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubj~)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjeubh)}(hj h]hv}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoeubeh}(h]h ]h"]h$]h&]jj uh1jhj6ehhhjHehMPubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2ehhhjHehMPubah}(h]j-eah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhj/ehhubj)}(hhh]j6)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjfhhubah}(h]h ]h"]h$]h&]uh1jhj/ehhhjHehMPubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+fj3j+fj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5fh]h Parameters}(hhhj7fhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3fubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjTfh]hint i}(hhhjVfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjNfubj)}(hhh]j6)}(h int valueh]h int value}(hjofhjmfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjifhMPhjjfubah}(h]h ]h"]h$]h&]uh1jhjNfubeh}(h]h ]h"]h$]h&]uh1jhjifhMPhjKfubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjfh]h atomic_t *v}(hhhjfhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMQhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMQhjKfubeh}(h]h ]h"]h$]h&]uh1jhj/fubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj/fubj6)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hAtomically updates hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh to (}(h to (hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh & }(h & hjfhhhNhNubjv)}(h**~i**h]h~i}(hhhj ghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh) with full ordering.}(h) with full ordering.hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj/fubj6)}(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.}(hj)ghj'ghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhj/fubj6)}(h **Return**h]jv)}(hj8gh]hReturn}(hhhj:ghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6gubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhj/fubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjNghhhNhNubjv)}(h**v**h]hv}(hhhjWghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNgubh.}(hjPhjNghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhj/fubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_acquire (C function)c.atomic_fetch_andnot_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMcubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjghhhjghMcubh)}(hatomic_fetch_andnot_acquireh]h)}(hatomic_fetch_andnot_acquireh]hatomic_fetch_andnot_acquire}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMcubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubh)}(hj\h]hi}(hhhjghhhNhNubah}(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}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jj)}j]jgsbc.atomic_fetch_andnot_acquireasbuh1hhjgubj9)}(h h]h }(hhhj$hhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubj~)}(hjh]h*}(hhhj2hhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubh)}(hj h]hv}(hhhj?hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjghMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghMcubah}(h]jgah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjghhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjkhhjihhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjfhhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMcubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjhubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjhh]hint i}(hhhjhhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMchjhubah}(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}(hhhjhhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMdhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMdhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjih]h Description}(hhhj ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjhubj6)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj4ihhhNhNubjv)}(h**v**h]hv}(hhhj=ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4iubh to (}(h to (hj4ihhhNhNubjv)}(h**v**h]hv}(hhhjPihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4iubh & }(h & hj4ihhhNhNubjv)}(h**~i**h]h~i}(hhhjcihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4iubh) with acquire ordering.}(h) with acquire ordering.hj4ihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjhubj6)}(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.}(hjihj}ihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjhubj6)}(h **Return**h]jv)}(hjih]hReturn}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjhubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjihhhNhNubjv)}(h**v**h]hv}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh.}(hjPhjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_release (C function)c.atomic_fetch_andnot_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjihhhjihMuubh)}(hatomic_fetch_andnot_releaseh]h)}(hatomic_fetch_andnot_releaseh]hatomic_fetch_andnot_release}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjihMuubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj#jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(h h]h }(hhhj1jhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubh)}(hj\h]hi}(hhhj?jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjZjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj\jmodnameN classnameNjajd)}jg]jj)}j]j jsbc.atomic_fetch_andnot_releaseasbuh1hhjSjubj9)}(h h]h }(hhhjzjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSjubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjSjubh)}(hj h]hv}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhjihMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjihMuubah}(h]jiah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjihhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMuubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jjj3jjj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjkh]hint i}(hhhjkhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMuhjkubah}(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<)}(hj9kh]h atomic_t *v}(hhhj;khhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7kubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj3kubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjTkhjRkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNkhMvhjOkubah}(h]h ]h"]h$]h&]uh1jhj3kubeh}(h]h ]h"]h$]h&]uh1jhjNkhMvhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubj6)}(h**Description**h]jv)}(hjtkh]h Description}(hhhjvkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrkubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hAtomically updates hjkhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh to (}(h to (hjkhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh & }(h & hjkhhhNhNubjv)}(h**~i**h]h~i}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh) with release ordering.}(h) with release ordering.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjjubj6)}(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.}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjjubj6)}(h **Return**h]jv)}(hjkh]hReturn}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjkhhhNhNubjv)}(h**v**h]hv}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh.}(hjPhjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_relaxed (C function)c.atomic_fetch_andnot_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjrubah}(h]h ]h"]h$]h&]uh1jhj"rubeh}(h]h ]h"]h$]h&]uh1jhj=rhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hjcrh]h Description}(hhhjerhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjarubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjyrhhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyrubh to (}(h to (hjyrhhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyrubh | }(h | hjyrhhhNhNubjv)}(h**i**h]hi}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyrubh) with full ordering.}(h) with full ordering.hjyrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(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.}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(h **Return**h]jv)}(hjrh]hReturn}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjrhhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh.}(hjPhjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_or_acquire (C function)c.atomic_fetch_or_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj+shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'shhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj:shhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'shhhj9shMubh)}(hatomic_fetch_or_acquireh]h)}(hatomic_fetch_or_acquireh]hatomic_fetch_or_acquire}(hhhjLshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHsubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'shhhj9shMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdsubj9)}(h h]h }(hhhjvshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdsubh)}(hj\h]hi}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdsubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`subj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjsmodnameN classnameNjajd)}jg]jj)}j]jNssbc.atomic_fetch_or_acquireasbuh1hhjsubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubj~)}(hjh]h*}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjsubh)}(hj h]hv}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`subeh}(h]h ]h"]h$]h&]jj uh1jhj'shhhj9shMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#shhhj9shMubah}(h]jsah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj shhubj)}(hhh]j6)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhj shhhj9shMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&th]h Parameters}(hhhj(thhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$tubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj tubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjEth]hint i}(hhhjGthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?tubj)}(hhh]j6)}(h int valueh]h int value}(hj`thj^thhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZthMhj[tubah}(h]h ]h"]h$]h&]uh1jhj?tubeh}(h]h ]h"]h$]h&]uh1jhjZthMhj{ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj{h]h atomic_t *v}(hhhj{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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhjz{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj>{ubeh}(h]h ]h"]h$]h&]uh1jhj"{ubj6)}(h**Description**h]jv)}(hj{h]h Description}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"{ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj{hhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh to (}(h to (hj{hhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh ^ }(h ^ hj{hhhNhNubjv)}(h**i**h]hi}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh) with relaxed ordering.}(h) with relaxed ordering.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"{ubj6)}(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|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"{ubj6)}(h **Return**h]jv)}(hj+|h]hReturn}(hhhj-|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)|ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"{ubj6)}(hNothing.h]hNothing.}(hjC|hjA|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_xor (C function)c.atomic_fetch_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjp|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjl|hhhj~|hMubh)}(hatomic_fetch_xorh]h)}(hatomic_fetch_xorh]hatomic_fetch_xor}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjl|hhhj~|hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubh)}(hj\h]hi}(hhhj|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}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj|modnameN classnameNjajd)}jg]jj)}j]j|sbc.atomic_fetch_xorasbuh1hhj|ubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubj~)}(hjh]h*}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj|ubh)}(hj h]hv}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjl|hhhj~|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjh|hhhj~|hMubah}(h]jc|ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhje|hhubj)}(hhh]j6)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjK}hjI}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjF}hhubah}(h]h ]h"]h$]h&]uh1jhje|hhhj~|hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2ja}j3ja}j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjk}h]h Parameters}(hhhjm}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhji}ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hje}ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hj}h]hint i}(hhhj}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]j6)}(h int valueh]h int value}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}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}(hhhj}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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubeh}(h]h ]h"]h$]h&]uh1jhje}ubj6)}(h**Description**h]jv)}(hj}h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hje}ubj6)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj~hhhNhNubjv)}(h**v**h]hv}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh to (}(h to (hj~hhhNhNubjv)}(h**v**h]hv}(hhhj0~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh ^ }(h ^ hj~hhhNhNubjv)}(h**i**h]hi}(hhhjC~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh) with full ordering.}(h) with full ordering.hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hje}ubj6)}(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_~hj]~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hje}ubj6)}(h **Return**h]jv)}(hjn~h]hReturn}(hhhjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl~ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhje}ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj~hhhNhNubjv)}(h**v**h]hv}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh.}(hjPhj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhje}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_acquire (C function)c.atomic_fetch_xor_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~hhhj~hMubh)}(hatomic_fetch_xor_acquireh]h)}(hatomic_fetch_xor_acquireh]hatomic_fetch_xor_acquire}(hhhj~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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<modnameN classnameNjajd)}jg]jj)}j]j~sbc.atomic_fetch_xor_acquireasbuh1hhj3ubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubj~)}(hjh]h*}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3ubh)}(hj h]hv}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hj~hhubj)}(hhh]j6)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjjhhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh to (}(h to (hjjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh ^ }(h ^ hjjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh) with acquire ordering.}(h) with acquire ordering.hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjĀh]hReturn}(hhhjƀhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj€ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjڀhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjڀubh.}(hjPhjڀhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_release (C function)c.atomic_fetch_xor_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj*hM-ubh)}(hatomic_fetch_xor_releaseh]h)}(hatomic_fetch_xor_releaseh]hatomic_fetch_xor_release}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj*hM-ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubh)}(hj\h]hi}(hhhjuhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j?sbc.atomic_fetch_xor_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjˁhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj*hM-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj*hM-ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjhhubj)}(hhh]j6)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hj6h]hint i}(hhhj8hhhNhNubah}(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]j6)}(h int valueh]h int value}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhM-hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM-hj-ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjoh]h atomic_t *v}(hhhjqhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM.hj-ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjɂhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj܂hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh ^ }(h ^ hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj0hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh.}(hjPhj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_relaxed (C function)c.atomic_fetch_xor_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnhhhjhM@ubh)}(hatomic_fetch_xor_relaxedh]h)}(hatomic_fetch_xor_relaxedh]hatomic_fetch_xor_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhM@ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj˃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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_fetch_xor_relaxedasbuh1hhj߃ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj߃ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj߃ubh)}(hj h]hv}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߃ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjhM@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhM@ubah}(h]jeah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjghhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjHhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhM@ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjgubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM@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}(hhhjDŽ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.hhMAhjubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjބhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjڄhMAhjۄubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڄhMAhjubeh}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjgubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh ^ }(h ^ hjhhhNhNubjv)}(h**i**h]hi}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjgubj6)}(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.}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjgubj6)}(h **Return**h]jv)}(hjph]hReturn}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjgubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_xchg (C function) c.atomic_xchghNtauh1hhjIhhhNhNubh)}(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}(hhhjȅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjąhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRubj9)}(h h]h }(hhhjׅhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjąhhhjօhMRubh)}(h atomic_xchgh]h)}(h atomic_xchgh]h atomic_xchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjąhhhjօhMRubj)}(h(atomic_t *v, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_xchgasbuh1hhjubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubh)}(hnewh]hnew}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjąhhhjօhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjօhMRubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjhhubj)}(hhh]j6)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjօhMRubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjĆh]h Parameters}(hhhjƆhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj†ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhMRhj݆ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhj݆ubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjچubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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.hhMShjubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hMShj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMShjچubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjWh]h Description}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj6)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hAtomically updates hjmhhhNhNubjv)}(h**v**h]hv}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh to }(h to hjmhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh with full ordering.}(h with full ordering.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjʇhhhNhNubjv)}(h**v**h]hv}(hhhjӇhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʇubh.}(hjPhjʇhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_acquire (C function)c.atomic_xchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMeubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMeubh)}(hatomic_xchg_acquireh]h)}(hatomic_xchg_acquireh]hatomic_xchg_acquire}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMeubj)}(h(atomic_t *v, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]jj)}j]j/sbc.atomic_xchg_acquireasbuh1hhjEubj9)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubj~)}(hjh]h*}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjEubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMeubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjhhubj)}(hhh]j6)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj)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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMehj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMehjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hj`h]hint new}(hhhjbhhhNhNubah}(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.hhMfhjZubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMfhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj6)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj͉hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with acquire ordering.}(h with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_release (C function)c.atomic_xchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLhhhj^hMwubh)}(hatomic_xchg_releaseh]h)}(hatomic_xchg_releaseh]hatomic_xchg_release}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhj^hMwubj)}(h(atomic_t *v, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jssbc.atomic_xchg_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjˊhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߊubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjߊubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߊubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjLhhhj^hMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhj^hMwubah}(h]jCah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEhhubj)}(hhh]j6)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj'hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hMwubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjFubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjkh]h atomic_t *v}(hhhjmhhhNhNubah}(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.hhMwhjeubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjbubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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.hhMxhjubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubj6)}(h**Description**h]jv)}(hjߋh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj݋ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjFubj6)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjFubj6)}(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-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjFubj6)}(h **Return**h]jv)}(hj<h]hReturn}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjFubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjRhhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh.}(hjPhjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_relaxed (C function)c.atomic_xchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_xchg_relaxedh]h)}(hatomic_xchg_relaxedh]hatomic_xchg_relaxed}(hhhjhhhNhNubah}(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}(hhhjԌhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjьubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj֌modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_xchg_relaxedasbuh1hhj͌ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj͌ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj͌ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͌ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjɌubj$)}(hint newh](j)}(hinth]hint}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubh)}(hnewh]hnew}(hhhjChhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjʍhjȍhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjč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<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj#h]h Description}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hAtomically updates hj9hhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh to }(h to hj9hhhNhNubjv)}(h**new**h]hnew}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh with relaxed ordering.}(h with relaxed ordering.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_cmpxchg (C function)c.atomic_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhj؎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԎhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjԎhhhjhMubh)}(hatomic_cmpxchgh]h)}(hatomic_cmpxchgh]hatomic_cmpxchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjԎhhhjhMubj)}(h(atomic_t *v, int old, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_cmpxchgasbuh1hhjubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hint oldh](j)}(hinth]hint}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj͎hhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj͎hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj*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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hjah]hint old}(hhhjchhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjՐh]h Description}(hhhjאhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӐubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjkh]hReturn}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_acquire (C function)c.atomic_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjÑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjґhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjёhMubh)}(hatomic_cmpxchg_acquireh]h)}(hatomic_cmpxchg_acquireh]hatomic_cmpxchg_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_cmpxchg_acquireasbuh1hhjubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint oldh](j)}(hinth]hint}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubh)}(holdh]hold}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjԒhjҒhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjϒhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjёhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hjLh]hint old}(hhhjNhhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj“hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj֓hhhNhNubjv)}(h**v**h]hv}(hhhjߓhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֓ubh == }(h == hj֓hhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֓ubh), atomically updates }(h), atomically updates hj֓hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֓ubh to }(h to hj֓hhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֓ubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hj֓hhhNhNubjv)}(h**v**h]hv}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֓ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj֓hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjVh]hReturn}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjlhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubh.}(hjPhjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_release (C function)c.atomic_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_cmpxchg_releaseh]h)}(hatomic_cmpxchg_releaseh]hatomic_cmpxchg_release}(hhhjϔhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˔ubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jєsbc.atomic_cmpxchg_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint oldh](j)}(hinth]hint}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubh)}(holdh]hold}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jՕj3jՕj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjߕh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݕubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj7h]hint old}(hhhj9hhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjph]hint new}(hhhjrhhhNhNubah}(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.hhMhjjubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjٕubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjٕubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjʖhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjݖhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjٕubj6)}(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.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjٕubj6)}(h **Return**h]jv)}(hjAh]hReturn}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjٕubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjWhhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh.}(hjPhjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjٕubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_relaxed (C function)c.atomic_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_cmpxchg_relaxedh]h)}(hatomic_cmpxchg_relaxedh]hatomic_cmpxchg_relaxed}(hhhjhhhNhNubah}(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}(hhhjٗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֗ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjۗmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_cmpxchg_relaxedasbuh1hhjҗubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjҗubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjҗubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjҗubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjΗubj$)}(hint oldh](j)}(hinth]hint}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubh)}(holdh]hold}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjΗubj$)}(hint newh](j)}(hinth]hint}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]ubh)}(hnewh]hnew}(hhhj}hhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjʘh]h Parameters}(hhhj̘hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȘubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj$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]j6)}(hint value to compare withh]hint value to compare with}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hj[h]hint new}(hhhj]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]j6)}(hint value to assignh]hint value to assign}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubeh}(h]h ]h"]h$]h&]uh1jhjĘubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĘubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjșhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjۙhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĘubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĘubj6)}(h **Return**h]jv)}(hj,h]hReturn}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĘubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjBhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh.}(hjPhjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĘubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_try_cmpxchg (C function)c.atomic_try_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_try_cmpxchgh]h)}(hatomic_try_cmpxchgh]hatomic_try_cmpxchg}(hhhjhhhNhNubah}(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}(hhhjÚhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjŚmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_try_cmpxchgasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint *oldh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(holdh]hold}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTubh)}(hnewh]hnew}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjÛhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڛubeh}(h]h ]h"]h$]h&]uh1jhjhMhjכubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjh]hint *old}(hhhjhhhNhNubah}(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]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.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<)}(hjRh]hint new}(hhhjThhhNhNubah}(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.hhMhjLubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjכubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjҜhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjIh]hReturn}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh if the exchange occured, }(h if the exchange occured, hj_hhhNhNubjv)}(h **false**h]hfalse}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh otherwise.}(h otherwise.hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_acquire (C function)c.atomic_try_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_try_cmpxchg_acquireh]h)}(hatomic_try_cmpxchg_acquireh]hatomic_try_cmpxchg_acquire}(hhhjНhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̝ubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jҝsbc.atomic_try_cmpxchg_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint *oldh](j)}(hinth]hint}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubj~)}(hjh]h*}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj>ubh)}(holdh]hold}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj͞hj˞hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjȞhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjEh]hint *old}(hhhjGhhhNhNubah}(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]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hj~h]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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 (}(hIf (hjϟhhhNhNubjv)}(h**v**h]hv}(hhhj؟hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh == }(h == hjϟhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh), atomically updates }(h), atomically updates hjϟhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh to }(h to hjϟhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjϟhhhNhNubjv)}(h**v**h]hv}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh is not modified, }(h is not modified, hjϟhhhNhNubjv)}(h**old**h]hold}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh$ is updated to the current value of }(h$ is updated to the current value of hjϟhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjϟubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjϟhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjuh]hReturn}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_release (C function)c.atomic_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjܠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؠhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjؠhhhjhMubh)}(hatomic_try_cmpxchg_releaseh]h)}(hatomic_try_cmpxchg_releaseh]hatomic_try_cmpxchg_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjؠhhhjhMubj)}(h (atomic_t *v, int *old, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_try_cmpxchg_releaseasbuh1hhjubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint *oldh](j)}(hinth]hint}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhj̡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 juh1hjjhjԠhhhjhMubah}(h]jϠah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjѠhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjѠhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj8h]h atomic_t *v}(hhhj:hhhNhNubah}(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.hhMhj2ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjqh]hint *old}(hhhjshhhNhNubah}(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.hhMhjkubj)}(hhh]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjŢhjâhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjΣhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_relaxed (C function)c.atomic_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM2ubh)}(hatomic_try_cmpxchg_relaxedh]h)}(hatomic_try_cmpxchg_relaxedh]hatomic_try_cmpxchg_relaxed}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM2ubj)}(h (atomic_t *v, int *old, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjImodnameN classnameNjajd)}jg]jj)}j]j*sbc.atomic_try_cmpxchg_relaxedasbuh1hhj@ubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj<ubj$)}(hint *oldh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(holdh]hold}(hhhjähhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj<ubj$)}(hint newh](j)}(hinth]hint}(hhhjܤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؤubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjؤubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjؤubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj<ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM2ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM2ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM2ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj?ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjdh]h atomic_t *v}(hhhjfhhhNhNubah}(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.hhM2hj^ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhM2hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM2hj[ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjh]hint *old}(hhhjhhhNhNubah}(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]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj[ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hj֥h]hint new}(hhhjإ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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjХubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj?ubj6)}(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 (}(hIf (hj'hhhNhNubjv)}(h**v**h]hv}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh == }(h == hj'hhhNhNubjv)}(h**old**h]hold}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh), atomically updates }(h), atomically updates hj'hhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh to }(h to hj'hhhNhNubjv)}(h**new**h]hnew}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hj'hhhNhNubjv)}(h**v**h]hv}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh is not modified, }(h is not modified, hj'hhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh$ is updated to the current value of }(h$ is updated to the current value of hj'hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj?ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hj?ubj6)}(h **Return**h]jv)}(hjͦh]hReturn}(hhhjϦhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj˦ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj?ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_sub_and_test (C function)c.atomic_sub_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhjAhMHubh)}(hatomic_sub_and_testh]h)}(hatomic_sub_and_testh]hatomic_sub_and_test}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhjAhMHubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jVsbc.atomic_sub_and_testasbuh1hhjubj9)}(h h]h }(hhhjǧhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjէhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubeh}(h]h ]h"]h$]h&]jj uh1jhj0hhhjAhMHubeh}(h]h ]h"]h$]h&]jj juh1hjjhj,hhhjAhMHubah}(h]j'ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhj)hhubj)}(hhh]j6)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhj hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjAhMHubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj(ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hjMh]hint i}(hhhjOhhhNhNubah}(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.hhMHhjGubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMHhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMHhjDubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhMIhjubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjèhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj(ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjרhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjרubh to (}(h to (hjרhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjרubh - }(h - hjרhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjרubh) with full ordering.}(h) with full ordering.hjרhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj(ubj6)}(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.}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhj(ubj6)}(h **Return**h]jv)}(hj1h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj(ubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh if the resulting value of }(h if the resulting value of hjGhhhNhNubjv)}(h**v**h]hv}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh is zero, }(h is zero, hjGhhhNhNubjv)}(h **false**h]hfalse}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh otherwise.}(h otherwise.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_dec_and_test (C function)c.atomic_dec_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM[ubh)}(hatomic_dec_and_testh]h)}(hatomic_dec_and_testh]hatomic_dec_and_test}(hhhj˩hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǩubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jͩsbc.atomic_dec_and_testasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjhhubj)}(hhh]j6)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM[ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jgj3jgj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjqh]h Parameters}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjkubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjkubj6)}(h**Description**h]jv)}(hj˪h]h Description}(hhhjͪhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjɪubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjkubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjkubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjkubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjkubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh if the resulting value of }(h if the resulting value of hj>hhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh is zero, }(h is zero, hj>hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh otherwise.}(h otherwise.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_inc_and_test (C function)c.atomic_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMmubh)}(hatomic_inc_and_testh]h)}(hatomic_inc_and_testh]hatomic_inc_and_test}(hhhj«hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMmubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޫubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jīsbc.atomic_inc_and_testasbuh1hhjګubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjګubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjګubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjګubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj֫ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjhhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMmubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j^j3j^j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjbubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubj6)}(h**Description**h]jv)}(hj¬h]h Description}(hhhjĬhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjbubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjجhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjجubh to (}(h to (hjجhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjجubh + 1) with full ordering.}(h + 1) with full ordering.hjجhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjbubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjbubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjbubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh if the resulting value of }(h if the resulting value of hj5hhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh is zero, }(h is zero, hj5hhhNhNubjv)}(h **false**h]hfalse}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh otherwise.}(h otherwise.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_add_negative (C function)c.atomic_add_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_add_negativeh]h)}(hatomic_add_negativeh]hatomic_add_negative}(hhhjhhhNhNubah}(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}(hhhjխhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѭubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjѭubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_negativeasbuh1hhjubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjGhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjͮhjˮhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjǮ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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj&h]h Description}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj<hhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh to (}(h to (hj<hhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh + }(h + hj<hhhNhNubjv)}(h**i**h]hi}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh) with full ordering.}(h) with full ordering.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjïhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhj֯hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_acquire (C function)c.atomic_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhjhMubh)}(hatomic_add_negative_acquireh]h)}(hatomic_add_negative_acquireh]hatomic_add_negative_acquire}(hhhj0hhhNhNubah}(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}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHubh)}(hj\h]hi}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjDubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j2sbc.atomic_add_negative_acquireasbuh1hhj|ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj|ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjDubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj)h]hint i}(hhhj+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]j6)}(hint value to addh]hint value to add}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>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<)}(hjbh]h atomic_t *v}(hhhjdhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjϱhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh if the resulting value of }(h if the resulting value of hj#hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh is negative, }(h is negative, hj#hhhNhNubjv)}(h **false**h]hfalse}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh otherwise.}(h otherwise.hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_release (C function)c.atomic_add_negative_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_add_negative_releaseh]h)}(hatomic_add_negative_releaseh]hatomic_add_negative_release}(hhhjhhhNhNubah}(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}(hhhjòhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjѲhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj߲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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_negative_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj5hhhNhNubah}(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]jzah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|hhubj)}(hhh]j6)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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 add h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj۳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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӳubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj*hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh to (}(h to (hj*hhhNhNubjv)}(h**v**h]hv}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh + }(h + hj*hhhNhNubjv)}(h**i**h]hi}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh) with release ordering.}(h) with release ordering.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj6)}(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.}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjĴhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_relaxed (C function)c.atomic_add_negative_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMubh)}(hatomic_add_negative_relaxedh]h)}(hatomic_add_negative_relaxedh]hatomic_add_negative_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hj\h]hi}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjsmodnameN classnameNjajd)}jg]jj)}j]j sbc.atomic_add_negative_relaxedasbuh1hhjjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjصhjֵhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjӵhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,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<)}(hjPh]h atomic_t *v}(hhhjRhhhNhNubah}(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.hhMhjJubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjжhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_add_unless (C function)c.atomic_fetch_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqhhhjhMubh)}(hatomic_fetch_add_unlessh]h)}(hatomic_fetch_add_unlessh]hatomic_fetch_add_unless}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMubj)}(h(atomic_t *v, int a, int u)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjշhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint ah](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hah]ha}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint uh](j)}(hinth]hint}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubh)}(hjQh]hu}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjƸ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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj߸hjݸhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjٸhMhjڸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٸhMhjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j<)}(hjh]hint a}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj6h]hint u}(hhhj8hhhNhNubah}(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.hhMhj0ubj)}(hhh]j6)}(hint value to compare withh]hint value to compare with}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjɹhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**a**h]ha}(hhhjܹhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj0hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh.}(hjPhj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add_unless (C function)c.atomic_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnhhhjhMubh)}(hatomic_add_unlessh]h)}(hatomic_add_unlessh]hatomic_add_unless}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhMubj)}(h(atomic_t *v, int a, int u)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjѺhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjߺhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint ah](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint uh](j)}(hinth]hint}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hjQh]hu}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjghhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjڻhjػhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjԻhMhjջubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԻhMhjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j<)}(hjh]hint a}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j<)}(hj1h]hint u}(hhhj3hhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjlh]h Description}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjļhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**a**h]ha}(hhhj׼hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh if }(h if hj+hhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh was updated, }(h was updated, hj+hhhNhNubjv)}(h **false**h]hfalse}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh otherwise.}(h otherwise.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_inc_not_zero (C function)c.atomic_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_inc_not_zeroh]h)}(hatomic_inc_not_zeroh]hatomic_inc_not_zero}(hhhjhhhNhNubah}(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}(hhhjνhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˽ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjнmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_inc_not_zeroasbuh1hhjǽubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjǽubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjǽubh)}(hj h]hv}(hhhj 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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jKj3jKj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjvhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjžhhhNhNubjv)}(h**v**h]hv}(hhhjξhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjžubh != 0), atomically updates }(h != 0), atomically updates hjžhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjžubh to (}(h to (hjžhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjžubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjžhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjžubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjžhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj6)}(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.}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj6)}(h **Return**h]jv)}(hj2h]hReturn}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh if }(h if hjHhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh was updated, }(h was updated, hjHhhhNhNubjv)}(h **false**h]hfalse}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh otherwise.}(h otherwise.hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_inc_unless_negative (C function)c.atomic_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_inc_unless_negativeh]h)}(hatomic_inc_unless_negativeh]hatomic_inc_unless_negative}(hhhj̿hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȿubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jοsbc.atomic_inc_unless_negativeasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj&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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubj6)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh >= 0), atomically updates }(h >= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubj6)}(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.}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubj6)}(h **Return**h]jv)}(hjOh]hReturn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh if }(h if hjehhhNhNubjv)}(h**v**h]hv}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh was updated, }(h was updated, hjehhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh otherwise.}(h otherwise.hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_dec_unless_positive (C function)c.atomic_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_dec_unless_positiveh]h)}(hatomic_dec_unless_positiveh]hatomic_dec_unless_positive}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_dec_unless_positiveasbuh1hhjubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjChhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjhhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh <= 0), atomically updates }(h <= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjlh]hReturn}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_dec_if_positive (C function)c.atomic_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM,ubh)}(hatomic_dec_if_positiveh]h)}(hatomic_dec_if_positiveh]hatomic_dec_if_positive}(hhhjhhhNhNubah}(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}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj(modnameN classnameNjajd)}jg]jj)}j]j sbc.atomic_dec_if_positiveasbuh1hhjubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjahhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjhhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubj6)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh > 0), atomically updates }(h > 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj6)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hThe old value of (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1), regardless of whether }(h - 1), regardless of whether hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated.}(h was updated.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_read (C function)c.atomic64_readhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j] atomic64_readsbc.atomic64_readasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM?ubh)}(h atomic64_readh]h)}(hjh]h atomic64_read}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM?ubj)}(h(const atomic64_t *v)h]j$)}(hconst atomic64_t *vh](j')}(hjn'h]hconst}(hhhjHhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjDubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jc.atomic64_readasbuh1hhjDubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubj)}(hhh]j6)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj h]hconst atomic64_t *v}(hhhj 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.hhM?hjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjEh]h Description}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj6)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hAtomically loads the value of hj[hhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh with relaxed ordering.}(h with relaxed ordering.hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj6)}(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.}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_read_acquire (C function)c.atomic64_read_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_read_acquiresbc.atomic64_read_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMPubh)}(hatomic64_read_acquireh]h)}(hjh]hatomic64_read_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMPubj)}(h(const atomic64_t *v)h]j$)}(hconst atomic64_t *vh](j')}(hjn'h]hconst}(hhhj9hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj5ubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYmodnameN classnameNjajd)}jg]jc.atomic64_read_acquireasbuh1hhj5ubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMPubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMPubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjhhubj)}(hhh]j6)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMPubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj6h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj6)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hAtomically loads the value of hjLhhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh with acquire ordering.}(h with acquire ordering.hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj6)}(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.}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_set (C function)c.atomic64_sethNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMaubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMaubh)}(h atomic64_seth]h)}(h atomic64_seth]h atomic64_set}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMaubj)}(h(atomic64_t *v, s64 i)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_setasbuh1hhjubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjpmodnameN classnameNjajd)}jg]j4c.atomic64_setasbuh1hhjgubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMaubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjhhubj)}(hhh]j6)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMaubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMahjubah}(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<)}(hj>h]hs64 i}(hhhj@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.hhMbhj8ubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMbhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjyh]h Description}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubj6)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with relaxed ordering.}(h with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubj6)}(hsbc.atomic64_set_releaseasbuh1hhjTubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjTubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubj$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jwc.atomic64_set_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj)hMsubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hMsubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjhhubj)}(hhh]j6)}(h atomic set with release orderingh]h atomic set with release ordering}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMsubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 i`` s64 value to assign **Description** Atomically sets **v** to **i** with release ordering. Unsafe to use in noinstr code; use raw_atomic64_set_release() there. **Return** Nothing.h](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj#ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjHh]h atomic64_t *v}(hhhjJhhhNhNubah}(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.hhMshjBubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hMshj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMshj?ubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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.hhMthj{ubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMthjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMthj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj#ubj6)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj#ubj6)}(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.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj#ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhj#ubj6)}(hNothing.h]hNothing.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_add (C function)c.atomic64_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjlhMubh)}(h atomic64_addh]h)}(h atomic64_addh]h atomic64_add}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj 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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjShhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jbj3jbj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjfubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj6)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjvhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh to (}(h to (hjvhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh + }(h + hjvhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh) with release ordering.}(h) with release ordering.hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_add_return_relaxed (C function)c.atomic64_add_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}j]atomic64_add_return_relaxedsbc.atomic64_add_return_relaxedasbuh1hhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$hhhjLhMubh)}(hatomic64_add_return_relaxedh]h)}(hjIh]hatomic64_add_return_relaxed}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhjLhMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jGc.atomic64_add_return_relaxedasbuh1hhjvubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jGc.atomic64_add_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubeh}(h]h ]h"]h$]h&]jj uh1jhj$hhhjLhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjLhMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjLhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?j3j?j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjhh]hs64 i}(hhhjjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj6)}(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.}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj6)}(h **Return**h]jv)}(hjLh]hReturn}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjbhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh.}(hjPhjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_add (C function)c.atomic64_fetch_addhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_addsbc.atomic64_fetch_addasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic64_fetch_addh]h)}(hjh]hatomic64_fetch_add}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_fetch_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj%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}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jc.atomic64_fetch_addasbuh1hhj9ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubj~)}(hjh]h*}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9ubh)}(hj h]hv}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjnhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh to (}(h to (hjnhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh + }(h + hjnhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh) with full ordering.}(h) with full ordering.hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_acquire (C function)c.atomic64_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj%modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_add_acquiresbc.atomic64_fetch_add_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjDhMubh)}(hatomic64_fetch_add_acquireh]h)}(hjAh]hatomic64_fetch_add_acquire}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjDhMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjwmodnameN classnameNjajd)}jg]j?c.atomic64_fetch_add_acquireasbuh1hhjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j?c.atomic64_fetch_add_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjDhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjDhMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjDhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj`h]hs64 i}(hhhjbhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubj6)}(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.}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubj6)}(h **Return**h]jv)}(hjDh]hReturn}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjZhhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubh.}(hjPhjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_release (C function)c.atomic64_fetch_add_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_add_releasesbc.atomic64_fetch_add_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic64_fetch_add_releaseh]h)}(hjh]hatomic64_fetch_add_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_fetch_add_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]jc.atomic64_fetch_add_releaseasbuh1hhj1ubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubj~)}(hjh]h*}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1ubh)}(hj h]hv}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjPh]h Description}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjfhhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh to (}(h to (hjfhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh + }(h + hjfhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh) with release ordering.}(h) with release ordering.hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_relaxed (C function)c.atomic64_fetch_add_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_add_relaxedsbc.atomic64_fetch_add_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj<hMubh)}(hatomic64_fetch_add_relaxedh]h)}(hj9h]hatomic64_fetch_add_relaxed}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj<hMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]j7c.atomic64_fetch_add_relaxedasbuh1hhjfubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j7c.atomic64_fetch_add_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj<hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj<hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hj hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j/j3j/j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjXh]hs64 i}(hhhjZhhhNhNubah}(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.hhMhjRubj)}(hhh]j6)}(hs64 value to addh]hs64 value to add}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj6)}(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.}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj6)}(h **Return**h]jv)}(hj<h]hReturn}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj3ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjRhhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh.}(hjPhjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_sub (C function)c.atomic64_subhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM,ubh)}(h atomic64_subh]h)}(h atomic64_subh]h atomic64_sub}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_subasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_subasbuh1hhjubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjVhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjhhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM,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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjKhhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh to (}(h to (hjKhhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh - }(h - hjKhhhNhNubjv)}(h**i**h]hi}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh) with relaxed ordering.}(h) with relaxed ordering.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj6)}(hubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM>ubh)}(hatomic64_sub_returnh]h)}(hj h]hatomic64_sub_return}(hhhj!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}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]j c.atomic64_sub_returnasbuh1hhj8ubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubh)}(hj\h]hi}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j c.atomic64_sub_returnasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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_sub_return() there. **Return** The updated value of **v**.h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hj*h]hs64 i}(hhhj,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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?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<)}(hjch]h atomic64_t *v}(hhhjehhhNhNubah}(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?hj]ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhM?hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM?hj!ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj$hhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh.}(hjPhj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_acquire (C function)c.atomic64_sub_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkmodnameN classnameNjajd)}jg]jj)}j]atomic64_sub_return_acquiresbc.atomic64_sub_return_acquireasbuh1hhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbhhhjhMQubh)}(hatomic64_sub_return_acquireh]h)}(hjh]hatomic64_sub_return_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjhMQubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_sub_return_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_sub_return_acquireasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjbhhhjhMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhjhMQubah}(h]jYah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhj[hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjbhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjhMQubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j}j3j}j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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.hhMQhjubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj0hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh to (}(h to (hj0hhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh - }(h - hj0hhhNhNubjv)}(h**i**h]hi}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh) with acquire ordering.}(h) with acquire ordering.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_release (C function)c.atomic64_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_sub_return_releasesbc.atomic64_sub_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMcubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMcubh)}(hatomic64_sub_return_releaseh]h)}(hjh]hatomic64_sub_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMcubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj9modnameN classnameNjajd)}jg]jc.atomic64_sub_return_releaseasbuh1hhj0ubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0ubh)}(hj\h]hi}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_sub_return_releaseasbuh1hhjwubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjwubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMcubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj"h]hs64 i}(hhhj$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.hhMchjubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMchj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMchjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj[h]h atomic64_t *v}(hhhj]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.hhMdhjUubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMdhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMdhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_relaxed (C function)c.atomic64_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcmodnameN classnameNjajd)}jg]jj)}j]atomic64_sub_return_relaxedsbc.atomic64_sub_return_relaxedasbuh1hhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjhMvubh)}(hatomic64_sub_return_relaxedh]h)}(hjh]hatomic64_sub_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjhMvubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j}c.atomic64_sub_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j}c.atomic64_sub_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjhMvubah}(h]jQah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjShhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjZhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjhMvubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjyubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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.hhMwhjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjyubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj(hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh to (}(h to (hj(hhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh - }(h - hj(hhhNhNubjv)}(h**i**h]hi}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh) with relaxed ordering.}(h) with relaxed ordering.hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjyubj6)}(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.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjyubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjyubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_sub (C function)c.atomic64_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_subsbc.atomic64_fetch_subasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic64_fetch_subh]h)}(hjh]hatomic64_fetch_sub}(hhhjhhhNhNubah}(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}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]jc.atomic64_fetch_subasbuh1hhj(ubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubh)}(hj\h]hi}(hhhj[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}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjxmodnameN classnameNjajd)}jg]jc.atomic64_fetch_subasbuh1hhjoubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjoubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/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}(hhhjUhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_acquire (C function)c.atomic64_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_sub_acquiresbc.atomic64_fetch_sub_acquireasbuh1hhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRhhhjzhMubh)}(hatomic64_fetch_sub_acquireh]h)}(hjwh]hatomic64_fetch_sub_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjzhMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]juc.atomic64_fetch_sub_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]juc.atomic64_fetch_sub_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjzhMubah}(h]jIah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKhhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjzhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmj3jmj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh - }(h - hj hhhNhNubjv)}(h**i**h]hi}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with acquire ordering.}(h) with acquire ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(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.}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_release (C function)c.atomic64_fetch_sub_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_sub_releasesbc.atomic64_fetch_sub_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic64_fetch_sub_releaseh]h)}(hjh]hatomic64_fetch_sub_release}(hhhj hhhNhNubah}(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}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]jc.atomic64_fetch_sub_releaseasbuh1hhj ubj9)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhjShhhNhNubah}(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}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjpmodnameN classnameNjajd)}jg]jc.atomic64_fetch_sub_releaseasbuh1hhjgubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'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<)}(hjKh]h atomic64_t *v}(hhhjMhhhNhNubah}(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.hhMhjEubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_relaxed (C function)c.atomic64_fetch_sub_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjSmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_sub_relaxedsbc.atomic64_fetch_sub_relaxedasbuh1hhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJhhhjrhMubh)}(hatomic64_fetch_sub_relaxedh]h)}(hjoh]hatomic64_fetch_sub_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjrhMubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jmc.atomic64_fetch_sub_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jmc.atomic64_fetch_sub_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjJhhhjrhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjrhMubah}(h]jAah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjChhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjrhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjoh]h Parameters}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj6)}(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.}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj6)}(h **Return**h]jv)}(hjrh]hReturn}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_inc (C function)c.atomic64_inchNtauh1hhjIhhhNhNubh)}(hhh](h)}(h!void atomic64_inc (atomic64_t *v)h]h)}(h void atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h atomic64_inch]h)}(h atomic64_inch]h atomic64_inc}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_incasbuh1hhjubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjEhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_inc_return_release (C function)c.atomic64_inc_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]atomic64_inc_return_releasesbc.atomic64_inc_return_releaseasbuh1hhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[hhhjhMubh)}(hatomic64_inc_return_releaseh]h)}(hjh]hatomic64_inc_return_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j~c.atomic64_inc_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjThhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjZhhhNhNubah}(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.hhMhjRubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with release ordering.}(h + 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_inc_return_relaxed (C function)c.atomic64_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]atomic64_inc_return_relaxedsbc.atomic64_inc_return_relaxedasbuh1hhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDhhhjlhMubh)}(hatomic64_inc_return_relaxedh]h)}(hjih]hatomic64_inc_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjlhMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jgc.atomic64_inc_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjDhhhjlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@hhhjlhMubah}(h]j;ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=hhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhjlhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj"h]h Parameters}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjAh]h atomic64_t *v}(hhhjChhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_inc (C function)c.atomic64_fetch_inchNtauh1hhjIhhhNhNubh)}(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}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj6modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_incsbc.atomic64_fetch_incasbuh1hhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)ubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-hhhjUhM)ubh)}(hatomic64_fetch_inch]h)}(hjRh]hatomic64_fetch_inc}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhjUhM)ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jPc.atomic64_fetch_incasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubah}(h]h ]h"]h$]h&]jj uh1jhj-hhhjUhM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhjUhM)ubah}(h]j$ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj&hhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhjUhM)ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj*h]h atomic64_t *v}(hhhj,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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hM)hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM)hj!ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjeh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh to (}(h to (hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh + 1) with full ordering.}(h + 1) with full ordering.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_acquire (C function)c.atomic64_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_inc_acquiresbc.atomic64_fetch_inc_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj>hM;ubh)}(hatomic64_fetch_inc_acquireh]h)}(hj;h]hatomic64_fetch_inc_acquire}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj>hM;ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqmodnameN classnameNjajd)}jg]j9c.atomic64_fetch_inc_acquireasbuh1hhjhubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj>hM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj>hM;ubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hM;hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM;hj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjNh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjdhhhNhNubjv)}(h**v**h]hv}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh to (}(h to (hjdhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_release (C function)c.atomic64_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_inc_releasesbc.atomic64_fetch_inc_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj'hMLubh)}(hatomic64_fetch_inc_releaseh]h)}(hj$h]hatomic64_fetch_inc_release}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hMLubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjZmodnameN classnameNjajd)}jg]j"c.atomic64_fetch_inc_releaseasbuh1hhjQubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjQubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj'hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hMLubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMLubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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.hhMLhjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMLhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMLhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj7 h]h Description}(hhhj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5 ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjM hhhNhNubjv)}(h**v**h]hv}(hhhjV hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM ubh to (}(h to (hjM hhhNhNubjv)}(h**v**h]hv}(hhhji hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM ubh + 1) with release ordering.}(h + 1) with release ordering.hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_relaxed (C function)c.atomic64_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}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^ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hM^ubh)}(hatomic64_fetch_inc_relaxedh]h)}(hj h]hatomic64_fetch_inc_relaxed}(hhhj# hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 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}(hhhjA hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj> ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjC modnameN classnameNjajd)}jg]j c.atomic64_fetch_inc_relaxedasbuh1hhj: ubj9)}(h h]h }(hhhj_ hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj: ubj~)}(hjh]h*}(hhhjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj: ubh)}(hj h]hv}(hhhjz hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj: ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6 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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhj hhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj 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}(hhhj 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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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 ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj" hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj ubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj6 hhhNhNubjv)}(h**v**h]hv}(hhhj? hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6 ubh to (}(h to (hj6 hhhNhNubjv)}(h**v**h]hv}(hhhjR hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6 ubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hj6 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj ubj6)}(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.}(hjn hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj ubj6)}(h **Return**h]jv)}(hj} h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhj ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_dec (C function)c.atomic64_dechNtauh1hhjIhhhNhNubh)}(hhh](h)}(h!void atomic64_dec (atomic64_t *v)h]h)}(h void atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMoubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hMoubh)}(h atomic64_dech]h)}(h atomic64_dech]h atomic64_dec}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMoubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sbc.atomic64_decasbuh1hhj ubj9)}(h h]h }(hhhj5 hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhjP 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 hMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMoubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhj hhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj| hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjw hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMoubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj 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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMohj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMohj ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj( hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj ubj6)}(hAtomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj(hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh.}(hjPhj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_dec_return_release (C function)c.atomic64_dec_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]jj)}j]atomic64_dec_return_releasesbc.atomic64_dec_return_releaseasbuh1hhjfhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfhhhjhMubh)}(hatomic64_dec_return_releaseh]h)}(hjh]hatomic64_dec_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjhMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_dec_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjfhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjhMubah}(h]j]ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_hhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j:j3j:j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjDh]h Parameters}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjch]h atomic64_t *v}(hhhjehhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with release ordering.}(h - 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_dec_return_relaxed (C function)c.atomic64_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjXmodnameN classnameNjajd)}jg]jj)}j]atomic64_dec_return_relaxedsbc.atomic64_dec_return_relaxedasbuh1hhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjOhhhjwhMubh)}(hatomic64_dec_return_relaxedh]h)}(hjth]hatomic64_dec_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjwhMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jrc.atomic64_dec_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjOhhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjwhMubah}(h]jFah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjHhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjwhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjLh]h atomic64_t *v}(hhhjNhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_dec (C function)c.atomic64_fetch_dechNtauh1hhjIhhhNhNubh)}(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}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_decsbc.atomic64_fetch_decasbuh1hhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8hhhj`hMubh)}(hatomic64_fetch_dech]h)}(hj]h]hatomic64_fetch_dec}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhj`hMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j[c.atomic64_fetch_decasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj8hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj`hMubah}(h]j/ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj5h]h atomic64_t *v}(hhhj7hhhNhNubah}(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.hhMhj/ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjph]h Description}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_acquire (C function)c.atomic64_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]jj)}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.hhMubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!hhhjIhMubh)}(hatomic64_fetch_dec_acquireh]h)}(hjFh]hatomic64_fetch_dec_acquire}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhjIhMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj|modnameN classnameNjajd)}jg]jDc.atomic64_fetch_dec_acquireasbuh1hhjsubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjsubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubah}(h]h ]h"]h$]h&]jj uh1jhj!hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjIhMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjIhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj 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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjYh]h Description}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjohhhNhNubjv)}(h**v**h]hv}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubh to (}(h to (hjohhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_release (C function)c.atomic64_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_dec_releasesbc.atomic64_fetch_dec_releaseasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj2hMubh)}(hatomic64_fetch_dec_releaseh]h)}(hj/h]hatomic64_fetch_dec_release}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj2hMubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjemodnameN classnameNjajd)}jg]j-c.atomic64_fetch_dec_releaseasbuh1hhj\ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjXubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj2hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj2hMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj 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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjBh]h Description}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjXhhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh to (}(h to (hjXhhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh - 1) with release ordering.}(h - 1) with release ordering.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_relaxed (C function)c.atomic64_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_dec_relaxedsbc.atomic64_fetch_dec_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic64_fetch_dec_relaxedh]h)}(hjh]hatomic64_fetch_dec_relaxed}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(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}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]jc.atomic64_fetch_dec_relaxedasbuh1hhjEubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubj~)}(hjh]h*}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjEubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjAhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh to (}(h to (hjAhhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_and (C function)c.atomic64_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(h atomic64_andh]h)}(h atomic64_andh]h atomic64_and}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj"modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_andasbuh1hhjubj9)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjNhhhNhNubah}(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}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkmodnameN classnameNjajd)}jg]j<c.atomic64_andasbuh1hhjbubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj h]hs64 i}(hhhjhhhNhNubah}(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]j6)}(h s64 valueh]h s64 value}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"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<)}(hjFh]h atomic64_t *v}(hhhjHhhhNhNubah}(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@ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h(hj<(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8(hMW hj9(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj8(hMW hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h**Description**h]jv)}(hj^(h]h Description}(hhhj`(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\(ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj'ubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjt(hhhNhNubjv)}(h**v**h]hv}(hhhj}(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt(ubh to (}(h to (hjt(hhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt(ubh & }(h & hjt(hhhNhNubjv)}(h**i**h]hi}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt(ubh) with relaxed ordering.}(h) with relaxed ordering.hjt(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj'ubj6)}(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(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ hj'ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hj'ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj(hhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh.}(hjPhj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_andnot (C function)c.atomic64_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhj&)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj")hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh ubj9)}(h h]h }(hhhj5)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj")hhhj4)hMh ubh)}(hatomic64_andnoth]h)}(hatomic64_andnoth]hatomic64_andnot}(hhhjG)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj")hhhj4)hMh ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjf)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjc)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjh)modnameN classnameNjajd)}jg]jj)}j]jI)sbc.atomic64_andnotasbuh1hhj_)ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_)ubh)}(hj\h]hi}(hhhj)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}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]j)c.atomic64_andnotasbuh1hhj)ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(hj h]hv}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[)ubeh}(h]h ]h"]h$]h&]jj uh1jhj")hhhj4)hMh ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj4)hMh ubah}(h]j)ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hj)hhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg hj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj4)hMh ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j**j3j**j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj4*h]h Parameters}(hhhj6*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2*ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjS*h]hs64 i}(hhhjU*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.hhMh hjM*ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hjn*hjl*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjh*hMh hji*ubah}(h]h ]h"]h$]h&]uh1jhjM*ubeh}(h]h ]h"]h$]h&]uh1jhjh*hMh hjJ*ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj*h]h atomic64_t *v}(hhhj*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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMi hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMi hjJ*ubeh}(h]h ]h"]h$]h&]uh1jhj.*ubj6)}(h**Description**h]jv)}(hj*h]h Description}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hj.*ubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh to (}(h to (hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh & }(h & hj*hhhNhNubjv)}(h**~i**h]h~i}(hhhj +hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh) with relaxed ordering.}(h) with relaxed ordering.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hj.*ubj6)}(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(+hj&+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hj.*ubj6)}(h **Return**h]jv)}(hj7+h]hReturn}(hhhj9+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5+ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hj.*ubj6)}(hNothing.h]hNothing.}(hjO+hjM+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hj.*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_fetch_andnot (C function)c.atomic64_fetch_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_andnotsbc.atomic64_fetch_andnotasbuh1hhjx+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjx+hhhj+hMz ubh)}(hatomic64_fetch_andnoth]h)}(hj+h]hatomic64_fetch_andnot}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjx+hhhj+hMz ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]j+c.atomic64_fetch_andnotasbuh1hhj+ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubh)}(hj\h]hi}(hhhj+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}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj,modnameN classnameNjajd)}jg]j+c.atomic64_fetch_andnotasbuh1hhj,ubj9)}(h h]h }(hhhj6,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhjD,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hj h]hv}(hhhjQ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj+ubeh}(h]h ]h"]h$]h&]jj uh1jhjx+hhhj+hMz ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjt+hhhj+hMz ubah}(h]jo+ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjq+hhubj)}(hhh]j6)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj},hj{,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjx,hhubah}(h]h ]h"]h$]h&]uh1jhjq+hhhj+hMz ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j,j3j,j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj,h]h Parameters}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj,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]j6)}(h s64 valueh]h s64 value}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,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}(hhhj,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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj -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,ubj6)}(h**Description**h]jv)}(hj0-h]h Description}(hhhj2-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.-ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj,ubj6)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hAtomically updates hjF-hhhNhNubjv)}(h**v**h]hv}(hhhjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF-ubh to (}(h to (hjF-hhhNhNubjv)}(h**v**h]hv}(hhhjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF-ubh & }(h & hjF-hhhNhNubjv)}(h**~i**h]h~i}(hhhju-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF-ubh) with full ordering.}(h) with full ordering.hjF-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj,ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj-hhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh.}(hjPhj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_acquire (C function)c.atomic64_fetch_andnot_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-hhhj.hM ubh)}(hatomic64_fetch_andnot_acquireh]h)}(hj.h]hatomic64_fetch_andnot_acquire}(hhhj/.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}(hhhjM.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjO.modnameN classnameNjajd)}jg]j.c.atomic64_fetch_andnot_acquireasbuh1hhjF.ubj9)}(h h]h }(hhhjk.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjF.ubh)}(hj\h]hi}(hhhjy.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjB.ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj.modnameN classnameNjajd)}jg]j.c.atomic64_fetch_andnot_acquireasbuh1hhj.ubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjB.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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj-hhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j/j3j/j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj/h]h Parameters}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj8/h]hs64 i}(hhhj:/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]j6)}(h s64 valueh]h s64 value}(hjS/hjQ/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjM/hM hjN/ubah}(h]h ]h"]h$]h&]uh1jhj2/ubeh}(h]h ]h"]h$]h&]uh1jhjM/hM hj//ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjq/h]h atomic64_t *v}(hhhjs/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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/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/ubj6)}(h**Description**h]jv)}(hj/h]h Description}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj6)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh to (}(h to (hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh & }(h & hj/hhhNhNubjv)}(h**~i**h]h~i}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh) with acquire ordering.}(h) with acquire ordering.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj6)}(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 0hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj6)}(h **Return**h]jv)}(hj0h]hReturn}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj20hhhNhNubjv)}(h**v**h]hv}(hhhj;0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj20ubh.}(hjPhj20hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_release (C function)c.atomic64_fetch_andnot_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjw0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjy0modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_andnot_releasesbc.atomic64_fetch_andnot_releaseasbuh1hhjp0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjp0hhhj0hM ubh)}(hatomic64_fetch_andnot_releaseh]h)}(hj0h]hatomic64_fetch_andnot_release}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp0hhhj0hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]j0c.atomic64_fetch_andnot_releaseasbuh1hhj0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0ubh)}(hj\h]hi}(hhhj0hhhNhNubah}(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}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 1ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]j0c.atomic64_fetch_andnot_releaseasbuh1hhj 1ubj9)}(h h]h }(hhhj.1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj 1ubj~)}(hjh]h*}(hhhj<1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj 1ubh)}(hj h]hv}(hhhjI1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0ubeh}(h]h ]h"]h$]h&]jj uh1jhjp0hhhj0hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl0hhhj0hM ubah}(h]jg0ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hji0hhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hju1hjs1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjp1hhubah}(h]h ]h"]h$]h&]uh1jhji0hhhj0hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj1h]hs64 i}(hhhj1hhhNhNubah}(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.hhM hj1ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hj1ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj1h]h atomic64_t *v}(hhhj1hhhNhNubah}(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.hhM hj1ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hj(2h]h Description}(hhhj*2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&2ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj6)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hAtomically updates hj>2hhhNhNubjv)}(h**v**h]hv}(hhhjG2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>2ubh to (}(h to (hj>2hhhNhNubjv)}(h**v**h]hv}(hhhjZ2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>2ubh & }(h & hj>2hhhNhNubjv)}(h**~i**h]h~i}(hhhjm2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>2ubh) with release ordering.}(h) with release ordering.hj>2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj6)}(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.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj6)}(h **Return**h]jv)}(hj2h]hReturn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj2hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh.}(hjPhj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_relaxed (C function)c.atomic64_fetch_andnot_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj2modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_andnot_relaxedsbc.atomic64_fetch_andnot_relaxedasbuh1hhj2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2hhhj3hM ubh)}(hatomic64_fetch_andnot_relaxedh]h)}(hj3h]hatomic64_fetch_andnot_relaxed}(hhhj'3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhj3hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjE3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB3ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjG3modnameN classnameNjajd)}jg]j3c.atomic64_fetch_andnot_relaxedasbuh1hhj>3ubj9)}(h h]h }(hhhjc3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>3ubh)}(hj\h]hi}(hhhjq3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:3ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj3modnameN classnameNjajd)}jg]j3c.atomic64_fetch_andnot_relaxedasbuh1hhj3ubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubj~)}(hjh]h*}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3ubh)}(hj h]hv}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:3ubeh}(h]h ]h"]h$]h&]jj uh1jhj2hhhj3hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhj3hM ubah}(h]j2ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj2hhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj3hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j4j3j4j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj4h]h Parameters}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hj04h]hs64 i}(hhhj24hhhNhNubah}(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.hhM hj*4ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hjK4hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjE4hM hjF4ubah}(h]h ]h"]h$]h&]uh1jhj*4ubeh}(h]h ]h"]h$]h&]uh1jhjE4hM hj'4ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hji4h]h atomic64_t *v}(hhhjk4hhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjc4ubeh}(h]h ]h"]h$]h&]uh1jhj~4hM hj'4ubeh}(h]h ]h"]h$]h&]uh1jhj 4ubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj4hhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh to (}(h to (hj4hhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh & }(h & hj4hhhNhNubjv)}(h**~i**h]h~i}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh) with relaxed ordering.}(h) with relaxed ordering.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubj6)}(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.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj*5hhhNhNubjv)}(h**v**h]hv}(hhhj35hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*5ubh.}(hjPhj*5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_or (C function) c.atomic64_orhNtauh1hhjIhhhNhNubh)}(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}(hhhjl5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj{5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjh5hhhjz5hM ubh)}(h atomic64_orh]h)}(h atomic64_orh]h atomic64_or}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjh5hhhjz5hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]jj)}j]j5sb c.atomic64_orasbuh1hhj5ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubh)}(hj\h]hi}(hhhj5hhhNhNubah}(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}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]j5 c.atomic64_orasbuh1hhj5ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhj!6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhj.6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj5ubeh}(h]h ]h"]h$]h&]jj uh1jhjh5hhhjz5hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjd5hhhjz5hM ubah}(h]j_5ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hja5hhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjZ6hjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjU6hhubah}(h]h ]h"]h$]h&]uh1jhja5hhhjz5hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jp6j3jp6j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjz6h]h Parameters}(hhhj|6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjx6ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hj6h]hs64 i}(hhhj6hhhNhNubah}(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]j6)}(h s64 valueh]h s64 value}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hM 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<)}(hj6h]h atomic64_t *v}(hhhj6hhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj6ubeh}(h]h ]h"]h$]h&]uh1jhjt6ubj6)}(h**Description**h]jv)}(hj 7h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj 7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj#7hhhNhNubjv)}(h**v**h]hv}(hhhj,7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#7ubh to (}(h to (hj#7hhhNhNubjv)}(h**v**h]hv}(hhhj?7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#7ubh | }(h | hj#7hhhNhNubjv)}(h**i**h]hi}(hhhjR7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#7ubh) with relaxed ordering.}(h) with relaxed ordering.hj#7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubj6)}(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.}(hjn7hjl7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubj6)}(h **Return**h]jv)}(hj}7h]hReturn}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubj6)}(hNothing.h]hNothing.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_or (C function)c.atomic64_fetch_orhNtauh1hhjIhhhNhNubh)}(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}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_orsbc.atomic64_fetch_orasbuh1hhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7hhhj7hM ubh)}(hatomic64_fetch_orh]h)}(hj7h]hatomic64_fetch_or}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj7hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj8modnameN classnameNjajd)}jg]j7c.atomic64_fetch_orasbuh1hhj8ubj9)}(h h]h }(hhhj58hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubh)}(hj\h]hi}(hhhjC8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj 8ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj^8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`8modnameN classnameNjajd)}jg]j7c.atomic64_fetch_orasbuh1hhjW8ubj9)}(h h]h }(hhhj|8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW8ubj~)}(hjh]h*}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjW8ubh)}(hj h]hv}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj 8ubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hM ubah}(h]j7ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7hhubj)}(hhh]j6)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hj9h]hs64 i}(hhhj9hhhNhNubah}(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.hhM hj8ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hj8ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj;9h]h atomic64_t *v}(hhhj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj99ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj59ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjV9hjT9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjP9hM hjQ9ubah}(h]h ]h"]h$]h&]uh1jhj59ubeh}(h]h ]h"]h$]h&]uh1jhjP9hM hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hjv9h]h Description}(hhhjx9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj6)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh to (}(h to (hj9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh | }(h | hj9hhhNhNubjv)}(h**i**h]hi}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh) with full ordering.}(h) with full ordering.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj9hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh.}(hjPhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_acquire (C function)c.atomic64_fetch_or_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjA:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjC:modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_or_acquiresbc.atomic64_fetch_or_acquireasbuh1hhj::hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjc:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj::hhhjb:hM ubh)}(hatomic64_fetch_or_acquireh]h)}(hj_:h]hatomic64_fetch_or_acquire}(hhhju:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj::hhhjb:hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]j]:c.atomic64_fetch_or_acquireasbuh1hhj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubh)}(hj\h]hi}(hhhj: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}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]j]:c.atomic64_fetch_or_acquireasbuh1hhj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubj~)}(hjh]h*}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubh)}(hj h]hv}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:ubeh}(h]h ]h"]h$]h&]jj uh1jhj::hhhjb:hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6:hhhjb:hM ubah}(h]j1:ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3:hhubj)}(hhh]j6)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj?;hj=;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj:;hhubah}(h]h ]h"]h$]h&]uh1jhj3:hhhjb:hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jU;j3jU;j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_;h]h Parameters}(hhhja;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj];ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hj~;h]hs64 i}(hhhj;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 hjx;ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhjx;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hju;ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj;h]h atomic64_t *v}(hhhj;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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hju;ubeh}(h]h ]h"]h$]h&]uh1jhjY;ubj6)}(h**Description**h]jv)}(hj;h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubj6)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj<hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh to (}(h to (hj<hhhNhNubjv)}(h**v**h]hv}(hhhj$<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh | }(h | hj<hhhNhNubjv)}(h**i**h]hi}(hhhj7<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh) with acquire ordering.}(h) with acquire ordering.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubj6)}(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.}(hjS<hjQ<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubj6)}(h **Return**h]jv)}(hjb<h]hReturn}(hhhjd<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`<ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjx<hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjx<ubh.}(hjPhjx<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjY;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_release (C function)c.atomic64_fetch_or_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_or_releasesbc.atomic64_fetch_or_releaseasbuh1hhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhj<hM ubh)}(hatomic64_fetch_or_releaseh]h)}(hj<h]hatomic64_fetch_or_release}(hhhj<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}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj =ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=modnameN classnameNjajd)}jg]j<c.atomic64_fetch_or_releaseasbuh1hhj=ubj9)}(h h]h }(hhhj-=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubh)}(hj\h]hi}(hhhj;=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}(hhhjV=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjX=modnameN classnameNjajd)}jg]j<c.atomic64_fetch_or_releaseasbuh1hhjO=ubj9)}(h h]h }(hhhjt=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjO=ubj~)}(hjh]h*}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjO=ubh)}(hj h]hv}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO=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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<hhubj)}(hhh]j6)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j=j3j=j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj=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]j6)}(h s64 valueh]h s64 value}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>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<)}(hj3>h]h atomic64_t *v}(hhhj5>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.hhM hj->ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjN>hjL>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjH>hM hjI>ubah}(h]h ]h"]h$]h&]uh1jhj->ubeh}(h]h ]h"]h$]h&]uh1jhjH>hM hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h**Description**h]jv)}(hjn>h]h Description}(hhhjp>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj6)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh to (}(h to (hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh | }(h | hj>hhhNhNubjv)}(h**i**h]hi}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh) with release ordering.}(h) with release ordering.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj6)}(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>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj6)}(h **Return**h]jv)}(hj>h]hReturn}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh.}(hjPhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_relaxed (C function)c.atomic64_fetch_or_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj9?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj;?modnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_or_relaxedsbc.atomic64_fetch_or_relaxedasbuh1hhj2?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj[?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2?hhhjZ?hM ubh)}(hatomic64_fetch_or_relaxedh]h)}(hjW?h]hatomic64_fetch_or_relaxed}(hhhjm?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2?hhhjZ?hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jU?c.atomic64_fetch_or_relaxedasbuh1hhj?ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubh)}(hj\h]hi}(hhhj?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}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jU?c.atomic64_fetch_or_relaxedasbuh1hhj?ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?ubh)}(hj h]hv}(hhhj @hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj?ubeh}(h]h ]h"]h$]h&]jj uh1jhj2?hhhjZ?hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.?hhhjZ?hM ubah}(h]j)?ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj+?hhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj7@hj5@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj2@hhubah}(h]h ]h"]h$]h&]uh1jhj+?hhhjZ?hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jM@j3jM@j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjW@h]h Parameters}(hhhjY@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hjv@h]hs64 i}(hhhjx@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.hhM hjp@ubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhjp@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjm@ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj@h]h atomic64_t *v}(hhhj@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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjm@ubeh}(h]h ]h"]h$]h&]uh1jhjQ@ubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjAhhhNhNubjv)}(h**v**h]hv}(hhhj AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh to (}(h to (hjAhhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh | }(h | hjAhhhNhNubjv)}(h**i**h]hi}(hhhj/AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh) with relaxed ordering.}(h) with relaxed ordering.hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubj6)}(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.}(hjKAhjIAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubj6)}(h **Return**h]jv)}(hjZAh]hReturn}(hhhj\AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXAubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjpAhhhNhNubjv)}(h**v**h]hv}(hhhjyAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpAubh.}(hjPhjpAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQ@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_xor (C function)c.atomic64_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAhhhjAhM ubh)}(h atomic64_xorh]h)}(h atomic64_xorh]h atomic64_xor}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjAhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jj)}j]jAsbc.atomic64_xorasbuh1hhjAubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hj\h]hi}(hhhj BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj;BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8Bubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=BmodnameN classnameNjajd)}jg]jBc.atomic64_xorasbuh1hhj4Bubj9)}(h h]h }(hhhjYBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4Bubj~)}(hjh]h*}(hhhjgBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4Bubh)}(hj h]hv}(hhhjtBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4Bubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM) hjAhhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjBubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hjBh]hs64 i}(hhhjBhhhNhNubah}(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 hjBubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjCh]h atomic64_t *v}(hhhjChhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj3Chj1ChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ChM! hj.Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj-ChM! hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj6)}(h**Description**h]jv)}(hjSCh]h Description}(hhhjUChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQCubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjBubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjiChhhNhNubjv)}(h**v**h]hv}(hhhjrChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiCubh to (}(h to (hjiChhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiCubh ^ }(h ^ hjiChhhNhNubjv)}(h**i**h]hi}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiCubh) with relaxed ordering.}(h) with relaxed ordering.hjiChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjBubj6)}(hGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubj~)}(hjh]h*}(hhhjLGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjGubh)}(hj h]hv}(hhhjYGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjFubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhjFhME ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|FhhhjFhME ubah}(h]jwFah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMN hjyFhhubj)}(hhh]j6)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hjGhhubah}(h]h ]h"]h$]h&]uh1jhjyFhhhjFhME ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jGj3jGj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjGh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjGubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hjGh]hs64 i}(hhhjGhhhNhNubah}(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.hhME hjGubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhME hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhME hjGubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjGh]h atomic64_t *v}(hhhjGhhhNhNubah}(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.hhMF hjGubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMF hjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMF hjGubeh}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hj8Hh]h Description}(hhhj:HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Hubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjGubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjNHhhhNhNubjv)}(h**v**h]hv}(hhhjWHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNHubh to (}(h to (hjNHhhhNhNubjv)}(h**v**h]hv}(hhhjjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNHubh ^ }(h ^ hjNHhhhNhNubjv)}(h**i**h]hi}(hhhj}HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNHubh) with acquire ordering.}(h) with acquire ordering.hjNHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjGubj6)}(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.}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjGubj6)}(h **Return**h]jv)}(hjHh]hReturn}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hjGubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjHhhhNhNubjv)}(h**v**h]hv}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh.}(hjPhjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_xor_release (C function)c.atomic64_fetch_xor_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjImodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_xor_releasesbc.atomic64_fetch_xor_releaseasbuh1hhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW ubj9)}(h h]h }(hhhj%IhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhj$IhMW ubh)}(hatomic64_fetch_xor_releaseh]h)}(hj!Ih]hatomic64_fetch_xor_release}(hhhj7IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3Iubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhj$IhMW ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjUIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWImodnameN classnameNjajd)}jg]jIc.atomic64_fetch_xor_releaseasbuh1hhjNIubj9)}(h h]h }(hhhjsIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNIubh)}(hj\h]hi}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJIubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjImodnameN classnameNjajd)}jg]jIc.atomic64_fetch_xor_releaseasbuh1hhjIubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubh)}(hj h]hv}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJIubeh}(h]h ]h"]h$]h&]jj uh1jhjHhhhj$IhMW ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhj$IhMW ubah}(h]jHah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM` hjHhhubj)}(hhh]j6)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjJhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj$IhMW ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jJj3jJj4uh1hhhhjIhNhNubjl)}(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_xor_release() there. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hj!Jh]h Parameters}(hhhj#JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjJubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hj@Jh]hs64 i}(hhhjBJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>Jubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hj:Jubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj[JhjYJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUJhMW hjVJubah}(h]h ]h"]h$]h&]uh1jhj:Jubeh}(h]h ]h"]h$]h&]uh1jhjUJhMW hj7Jubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjyJh]h atomic64_t *v}(hhhj{JhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjsJubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMX hjJubah}(h]h ]h"]h$]h&]uh1jhjsJubeh}(h]h ]h"]h$]h&]uh1jhjJhMX hj7Jubeh}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjJubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjJhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh to (}(h to (hjJhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh ^ }(h ^ hjJhhhNhNubjv)}(h**i**h]hi}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh) with release ordering.}(h) with release ordering.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjJubj6)}(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.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hjJubj6)}(h **Return**h]jv)}(hj$Kh]hReturn}(hhhj&KhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"Kubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^ hjJubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj:KhhhNhNubjv)}(h**v**h]hv}(hhhjCKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:Kubh.}(hjPhj:KhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^ hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_xor_relaxed (C function)c.atomic64_fetch_xor_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|Kubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jj)}j]atomic64_fetch_xor_relaxedsbc.atomic64_fetch_xor_relaxedasbuh1hhjxKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxKhhhjKhMj ubh)}(hatomic64_fetch_xor_relaxedh]h)}(hjKh]hatomic64_fetch_xor_relaxed}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxKhhhjKhMj ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jKc.atomic64_fetch_xor_relaxedasbuh1hhjKubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubh)}(hj\h]hi}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjKubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jKc.atomic64_fetch_xor_relaxedasbuh1hhjLubj9)}(h h]h }(hhhj6LhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLubj~)}(hjh]h*}(hhhjDLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLubh)}(hj h]hv}(hhhjQLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjKubeh}(h]h ]h"]h$]h&]jj uh1jhjxKhhhjKhMj ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjtKhhhjKhMj ubah}(h]joKah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMs hjqKhhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj}Lhj{LhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hjxLhhubah}(h]h ]h"]h$]h&]uh1jhjqKhhhjKhMj ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLj3jLj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hjLubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j<)}(hjLh]hs64 i}(hhhjLhhhNhNubah}(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.hhMj hjLubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhMj hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMj hjLubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjLh]h atomic64_t *v}(hhhjLhhhNhNubah}(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.hhMk hjLubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj MhMk hj Mubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj MhMk hjLubeh}(h]h ]h"]h$]h&]uh1jhjLubj6)}(h**Description**h]jv)}(hj0Mh]h Description}(hhhj2MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.Mubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hjLubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjFMhhhNhNubjv)}(h**v**h]hv}(hhhjOMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFMubh to (}(h to (hjFMhhhNhNubjv)}(h**v**h]hv}(hhhjbMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFMubh ^ }(h ^ hjFMhhhNhNubjv)}(h**i**h]hi}(hhhjuMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFMubh) with relaxed ordering.}(h) with relaxed ordering.hjFMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hjLubj6)}(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.}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjLubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hjLubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh.}(hjPhjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_xchg (C function)c.atomic64_xchghNtauh1hhjIhhhNhNubh)}(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}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j] atomic64_xchgsbc.atomic64_xchgasbuh1hhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMhhhjNhM| ubh)}(h atomic64_xchgh]h)}(hjNh]h atomic64_xchg}(hhhj/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}(hhhjMNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjONmodnameN classnameNjajd)}jg]jNc.atomic64_xchgasbuh1hhjFNubj9)}(h h]h }(hhhjkNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFNubj~)}(hjh]h*}(hhhjyNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFNubh)}(hj h]hv}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjBNubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]jNc.atomic64_xchgasbuh1hhjNubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubh)}(hnewh]hnew}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjBNubeh}(h]h ]h"]h$]h&]jj uh1jhjMhhhjNhM| ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjNhM| ubah}(h]jMah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMhhubj)}(hhh]j6)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jOj3jOj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjOh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj9Oh]h atomic64_t *v}(hhhj;OhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7Oubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hj3Oubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjTOhjROhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNOhM| hjOOubah}(h]h ]h"]h$]h&]uh1jhj3Oubeh}(h]h ]h"]h$]h&]uh1jhjNOhM| hj0Oubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjrOh]hs64 new}(hhhjtOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjlOubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhM} hjOubah}(h]h ]h"]h$]h&]uh1jhjlOubeh}(h]h ]h"]h$]h&]uh1jhjOhM} hj0Oubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjOh]h Description}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj6)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hAtomically updates hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh to }(h to hjOhhhNhNubjv)}(h**new**h]hnew}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh with full ordering.}(h with full ordering.hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj6)}(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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj6)}(h **Return**h]jv)}(hj Ph]hReturn}(hhhj PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj PhhhNhNubjv)}(h**v**h]hv}(hhhj)PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Pubh.}(hjPhj PhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_acquire (C function)c.atomic64_xchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjePhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgPmodnameN classnameNjajd)}jg]jj)}j]atomic64_xchg_acquiresbc.atomic64_xchg_acquireasbuh1hhj^Phhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^PhhhjPhM ubh)}(hatomic64_xchg_acquireh]h)}(hjPh]hatomic64_xchg_acquire}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^PhhhjPhM ubj)}(h(atomic64_t *v, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjPmodnameN classnameNjajd)}jg]jPc.atomic64_xchg_acquireasbuh1hhjPubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj h]hv}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj QmodnameN classnameNjajd)}jg]jPc.atomic64_xchg_acquireasbuh1hhjQubj9)}(h h]h }(hhhj)QhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQubh)}(hnewh]hnew}(hhhj7QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubeh}(h]h ]h"]h$]h&]jj uh1jhj^PhhhjPhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZPhhhjPhM ubah}(h]jUPah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWPhhubj)}(hhh]j6)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjdQhjbQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_Qhhubah}(h]h ]h"]h$]h&]uh1jhjWPhhhjPhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzQj3jzQj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjQh]h Parameters}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjQh]h atomic64_t *v}(hhhjQhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhM 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}(hhhjQhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjQubeh}(h]h ]h"]h$]h&]uh1jhj~Qubj6)}(h**Description**h]jv)}(hjRh]h Description}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubj6)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hAtomically updates hj-RhhhNhNubjv)}(h**v**h]hv}(hhhj6RhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-Rubh to }(h to hj-RhhhNhNubjv)}(h**new**h]hnew}(hhhjIRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-Rubh with acquire ordering.}(h with acquire ordering.hj-RhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubj6)}(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.}(hjeRhjcRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubj6)}(h **Return**h]jv)}(hjtRh]hReturn}(hhhjvRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrRubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjRhhhNhNubjv)}(h**v**h]hv}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh.}(hjPhjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_release (C function)c.atomic64_xchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjRmodnameN classnameNjajd)}jg]jj)}j]atomic64_xchg_releasesbc.atomic64_xchg_releaseasbuh1hhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRhhhjRhM ubh)}(hatomic64_xchg_releaseh]h)}(hjRh]hatomic64_xchg_release}(hhhjShhhNhNubah}(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}(hhhj!ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#SmodnameN classnameNjajd)}jg]jRc.atomic64_xchg_releaseasbuh1hhjSubj9)}(h h]h }(hhhj?ShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSubj~)}(hjh]h*}(hhhjMShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjSubh)}(hj h]hv}(hhhjZShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjuShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrSubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjwSmodnameN classnameNjajd)}jg]jRc.atomic64_xchg_releaseasbuh1hhjnSubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnSubh)}(hnewh]hnew}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnSubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRhhubj)}(hhh]j6)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jSj3jSj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj Th]h atomic64_t *v}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj Tubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjTubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj(Thj&ThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"ThM hj#Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj"ThM hjTubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjFTh]hs64 new}(hhhjHThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj@Tubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjaThj_ThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[ThM hj\Tubah}(h]h ]h"]h$]h&]uh1jhj@Tubeh}(h]h ]h"]h$]h&]uh1jhj[ThM hjTubeh}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hAtomically updates hjThhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh to }(h to hjThhhNhNubjv)}(h**new**h]hnew}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh with release ordering.}(h with release ordering.hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(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.}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(h **Return**h]jv)}(hjTh]hReturn}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjThhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh.}(hjPhjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_relaxed (C function)c.atomic64_xchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj9UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Uubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj;UmodnameN classnameNjajd)}jg]jj)}j]atomic64_xchg_relaxedsbc.atomic64_xchg_relaxedasbuh1hhj2Uhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj[UhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2UhhhjZUhM ubh)}(hatomic64_xchg_relaxedh]h)}(hjWUh]hatomic64_xchg_relaxed}(hhhjmUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiUubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2UhhhjZUhM ubj)}(h(atomic64_t *v, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jUUc.atomic64_xchg_relaxedasbuh1hhjUubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubj~)}(hjh]h*}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubh)}(hj h]hv}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jUUc.atomic64_xchg_relaxedasbuh1hhjUubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubh)}(hnewh]hnew}(hhhj VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubeh}(h]h ]h"]h$]h&]jj uh1jhj2UhhhjZUhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.UhhhjZUhM ubah}(h]j)Uah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj+Uhhubj)}(hhh]j6)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj8Vhj6VhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3Vhhubah}(h]h ]h"]h$]h&]uh1jhj+UhhhjZUhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNVj3jNVj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXVh]h Parameters}(hhhjZVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVVubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjwVh]h atomic64_t *v}(hhhjyVhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjuVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqVubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjqVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjnVubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjVh]hs64 new}(hhhjVhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjnVubeh}(h]h ]h"]h$]h&]uh1jhjRVubj6)}(h**Description**h]jv)}(hjVh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubj6)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hAtomically updates hjWhhhNhNubjv)}(h**v**h]hv}(hhhj WhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh to }(h to hjWhhhNhNubjv)}(h**new**h]hnew}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh with relaxed ordering.}(h with relaxed ordering.hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubj6)}(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.}(hj9Whj7WhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubj6)}(h **Return**h]jv)}(hjHWh]hReturn}(hhhjJWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFWubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj^WhhhNhNubjv)}(h**v**h]hv}(hhhjgWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^Wubh.}(hjPhj^WhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_cmpxchg (C function)c.atomic64_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWmodnameN classnameNjajd)}jg]jj)}j]atomic64_cmpxchgsbc.atomic64_cmpxchgasbuh1hhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWhhhjWhM ubh)}(hatomic64_cmpxchgh]h)}(hjWh]hatomic64_cmpxchg}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjWhM ubj)}(h!(atomic64_t *v, s64 old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWmodnameN classnameNjajd)}jg]jWc.atomic64_cmpxchgasbuh1hhjWubj9)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubj~)}(hjh]h*}(hhhj!XhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjWubh)}(hj h]hv}(hhhj.XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjIXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKXmodnameN classnameNjajd)}jg]jWc.atomic64_cmpxchgasbuh1hhjBXubj9)}(h h]h }(hhhjgXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBXubh)}(holdh]hold}(hhhjuXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBXubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjXmodnameN classnameNjajd)}jg]jWc.atomic64_cmpxchgasbuh1hhjXubj9)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXubh)}(hnewh]hnew}(hhhjXhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jYj3jYj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj Yh]h Parameters}(hhhj YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj)Yh]h atomic64_t *v}(hhhj+YhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'Yubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#Yubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjDYhjBYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>YhM hj?Yubah}(h]h ]h"]h$]h&]uh1jhj#Yubeh}(h]h ]h"]h$]h&]uh1jhj>YhM hj Yubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hjbYh]hs64 old}(hhhjdYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`Yubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\Yubj)}(hhh]j6)}(hs64 value to compare withh]hs64 value to compare with}(hj}Yhj{YhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwYhM hjxYubah}(h]h ]h"]h$]h&]uh1jhj\Yubeh}(h]h ]h"]h$]h&]uh1jhjwYhM hj Yubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjYh]hs64 new}(hhhjYhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhM hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM hj Yubeh}(h]h ]h"]h$]h&]uh1jhjYubj6)}(h**Description**h]jv)}(hjYh]h Description}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjYhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh == }(h == hjYhhhNhNubjv)}(h**old**h]hold}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh), atomically updates }(h), atomically updates hjYhhhNhNubjv)}(h**v**h]hv}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh to }(h to hjYhhhNhNubjv)}(h**new**h]hnew}(hhhj.ZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjYhhhNhNubjv)}(h**v**h]hv}(hhhjAZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj6)}(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.}(hj]Zhj[ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj6)}(h **Return**h]jv)}(hjlZh]hReturn}(hhhjnZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjZubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjZhhhNhNubjv)}(h**v**h]hv}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubh.}(hjPhjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_acquire (C function)c.atomic64_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjZmodnameN classnameNjajd)}jg]jj)}j]atomic64_cmpxchg_acquiresbc.atomic64_cmpxchg_acquireasbuh1hhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjZhM ubh)}(hatomic64_cmpxchg_acquireh]h)}(hjZh]hatomic64_cmpxchg_acquire}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhM ubj)}(h!(atomic64_t *v, s64 old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jZc.atomic64_cmpxchg_acquireasbuh1hhj[ubj9)}(h h]h }(hhhj7[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubj~)}(hjh]h*}(hhhjE[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[ubh)}(hj h]hv}(hhhjR[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[ubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjm[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjo[modnameN classnameNjajd)}jg]jZc.atomic64_cmpxchg_acquireasbuh1hhjf[ubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjf[ubh)}(holdh]hold}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[ubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jZc.atomic64_cmpxchg_acquireasbuh1hhj[ubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubh)}(hnewh]hnew}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[ubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjZhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhM ubah}(h]jZah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj\hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj \hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$\j3j$\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.\h]h Parameters}(hhhj0\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,\ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjM\h]h atomic64_t *v}(hhhjO\hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjK\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjG\ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjh\hjf\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjb\hM hjc\ubah}(h]h ]h"]h$]h&]uh1jhjG\ubeh}(h]h ]h"]h$]h&]uh1jhjb\hM hjD\ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hj\h]hs64 old}(hhhj\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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM hjD\ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hj\h]hs64 new}(hhhj\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]j6)}(hs64 value to assignh]hs64 value to assign}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM hjD\ubeh}(h]h ]h"]h$]h&]uh1jhj(\ubj6)}(h**Description**h]jv)}(hj\h]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj(\ubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh == }(h == hj]hhhNhNubjv)}(h**old**h]hold}(hhhj,]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh), atomically updates }(h), atomically updates hj]hhhNhNubjv)}(h**v**h]hv}(hhhj?]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh to }(h to hj]hhhNhNubjv)}(h**new**h]hnew}(hhhjR]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hj]hhhNhNubjv)}(h**v**h]hv}(hhhje]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj(\ubj6)}(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.}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj(\ubj6)}(h **Return**h]jv)}(hj]h]hReturn}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj(\ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh.}(hjPhj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj(\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_release (C function)c.atomic64_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]jj)}j]atomic64_cmpxchg_releasesbc.atomic64_cmpxchg_releaseasbuh1hhj]hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj ^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]hhhj ^hM ubh)}(hatomic64_cmpxchg_releaseh]h)}(hj ^h]hatomic64_cmpxchg_release}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]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}(hhhj=^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?^modnameN classnameNjajd)}jg]j^c.atomic64_cmpxchg_releaseasbuh1hhj6^ubj9)}(h h]h }(hhhj[^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6^ubj~)}(hjh]h*}(hhhji^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6^ubh)}(hj h]hv}(hhhjv^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2^ubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]j^c.atomic64_cmpxchg_releaseasbuh1hhj^ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubh)}(holdh]hold}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2^ubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]j^c.atomic64_cmpxchg_releaseasbuh1hhj^ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubh)}(hnewh]hnew}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2^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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj]hhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj2_hj0_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jH_j3jH_j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjR_h]h Parameters}(hhhjT_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjP_ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjq_h]h atomic64_t *v}(hhhjs_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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhjk_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hjh_ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hj_h]hs64 old}(hhhj_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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hjh_ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hj_h]hs64 new}(hhhj_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]j6)}(hs64 value to assignh]hs64 value to assign}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hjh_ubeh}(h]h ]h"]h$]h&]uh1jhjL_ubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhj `hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj4`hhhNhNubjv)}(h**v**h]hv}(hhhj=`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4`ubh == }(h == hj4`hhhNhNubjv)}(h**old**h]hold}(hhhjP`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4`ubh), atomically updates }(h), atomically updates hj4`hhhNhNubjv)}(h**v**h]hv}(hhhjc`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4`ubh to }(h to hj4`hhhNhNubjv)}(h**new**h]hnew}(hhhjv`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4`ubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hj4`hhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4`ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj4`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubj6)}(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`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj`hhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh.}(hjPhj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_relaxed (C function)c.atomic64_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj aubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]jj)}j]atomic64_cmpxchg_relaxedsbc.atomic64_cmpxchg_relaxedasbuh1hhjahhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj1ahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjahhhj0ahM ubh)}(hatomic64_cmpxchg_relaxedh]h)}(hj-ah]hatomic64_cmpxchg_relaxed}(hhhjCahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?aubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhj0ahM ubj)}(h!(atomic64_t *v, s64 old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjaahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^aubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcamodnameN classnameNjajd)}jg]j+ac.atomic64_cmpxchg_relaxedasbuh1hhjZaubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZaubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjZaubh)}(hj h]hv}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVaubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]j+ac.atomic64_cmpxchg_relaxedasbuh1hhjaubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(holdh]hold}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVaubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]j+ac.atomic64_cmpxchg_relaxedasbuh1hhjaubj9)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(hnewh]hnew}(hhhj)bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVaubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhj0ahM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhj0ahM ubah}(h]j`ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjahhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjVbhjTbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhj0ahM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jlbj3jlbj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjvbh]h Parameters}(hhhjxbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtbubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjbh]h atomic64_t *v}(hhhjbhhhNhNubah}(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 hjbubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjbubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hjbh]hs64 old}(hhhjbhhhNhNubah}(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 hjbubj)}(hhh]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjbubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjch]hs64 new}(hhhj chhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hj"chj chhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjbubeh}(h]h ]h"]h$]h&]uh1jhjpbubj6)}(h**Description**h]jv)}(hjBch]h Description}(hhhjDchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@cubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjXchhhNhNubjv)}(h**v**h]hv}(hhhjachhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXcubh == }(h == hjXchhhNhNubjv)}(h**old**h]hold}(hhhjtchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXcubh), atomically updates }(h), atomically updates hjXchhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXcubh to }(h to hjXchhhNhNubjv)}(h**new**h]hnew}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXcubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjXchhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXcubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjXchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubj6)}(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.}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubj6)}(h **Return**h]jv)}(hjch]hReturn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjchhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh.}(hjPhjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!atomic64_try_cmpxchg (C function)c.atomic64_try_cmpxchghNtauh1hhjIhhhNhNubh)}(hhh](h)}(hdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,dhhhj=dhM ubh)}(hatomic64_try_cmpxchgh]h)}(hatomic64_try_cmpxchgh]hatomic64_try_cmpxchg}(hhhjPdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLdubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,dhhhj=dhM ubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjodhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjldubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqdmodnameN classnameNjajd)}jg]jj)}j]jRdsbc.atomic64_try_cmpxchgasbuh1hhjhdubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhdubj~)}(hjh]h*}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhdubh)}(hj h]hv}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhdubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjddubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jdc.atomic64_try_cmpxchgasbuh1hhjdubj9)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdubj~)}(hjh]h*}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdubh)}(holdh]hold}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjddubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjemodnameN classnameNjajd)}jg]jdc.atomic64_try_cmpxchgasbuh1hhjeubj9)}(h h]h }(hhhj8ehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubh)}(hnewh]hnew}(hhhjFehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjddubeh}(h]h ]h"]h$]h&]jj uh1jhj,dhhhj=dhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(dhhhj=dhM ubah}(h]j#dah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hj%dhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjsehjqehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjnehhubah}(h]h ]h"]h$]h&]uh1jhj%dhhhj=dhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhjIhNhNubjl)}(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. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg() there. **Return** **true** if the exchange occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjeubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjeh]h atomic64_t *v}(hhhjehhhNhNubah}(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.hhM hjeubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehM hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehM hjeubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j<)}(hjeh]hs64 *old}(hhhjehhhNhNubah}(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.hhM hjeubj)}(hhh]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjeubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hj$fh]hs64 new}(hhhj&fhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj"fubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjfubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hj?fhj=fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9fhM hj:fubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhj9fhM hjeubeh}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hj_fh]h Description}(hhhjafhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]fubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjeubj6)}(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 (}(hIf (hjufhhhNhNubjv)}(h**v**h]hv}(hhhj~fhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh == }(h == hjufhhhNhNubjv)}(h**old**h]hold}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh), atomically updates }(h), atomically updates hjufhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh to }(h to hjufhhhNhNubjv)}(h**new**h]hnew}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjufhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh is not modified, }(h is not modified, hjufhhhNhNubjv)}(h**old**h]hold}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh$ is updated to the current value of }(h$ is updated to the current value of hjufhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjufubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjufhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjeubj6)}(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.}(hj ghj ghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjeubj6)}(h **Return**h]jv)}(hjgh]hReturn}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjeubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj5ghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1gubh if the exchange occured, }(h if the exchange occured, hj1ghhhNhNubjv)}(h **false**h]hfalse}(hhhjHghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1gubh otherwise.}(h otherwise.hj1ghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_acquire (C function)c.atomic64_try_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ ubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ghhhjghM/ ubh)}(hatomic64_try_cmpxchg_acquireh]h)}(hatomic64_try_cmpxchg_acquireh]hatomic64_try_cmpxchg_acquire}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~ghhhjghM/ ubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgmodnameN classnameNjajd)}jg]jj)}j]jgsbc.atomic64_try_cmpxchg_acquireasbuh1hhjgubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgubj~)}(hjh]h*}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubh)}(hj h]hv}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jgc.atomic64_try_cmpxchg_acquireasbuh1hhjhubj9)}(h h]h }(hhhj5hhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubj~)}(hjh]h*}(hhhjChhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhubh)}(holdh]hold}(hhhjPhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjlhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjihubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjnhmodnameN classnameNjajd)}jg]jgc.atomic64_try_cmpxchg_acquireasbuh1hhjehubj9)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjehubh)}(hnewh]hnew}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjehubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubeh}(h]h ]h"]h$]h&]jj uh1jhj~ghhhjghM/ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzghhhjghM/ ubah}(h]jugah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM; hjwghhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM. hjhhhubah}(h]h ]h"]h$]h&]uh1jhjwghhhjghM/ ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjhubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjih]h atomic64_t *v}(hhhjihhhNhNubah}(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.hhM/ hjhubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihM/ hjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihM/ hjhubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j<)}(hj=ih]hs64 *old}(hhhj?ihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;iubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 hj7iubj)}(hhh]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjXihjVihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRihM0 hjSiubah}(h]h ]h"]h$]h&]uh1jhj7iubeh}(h]h ]h"]h$]h&]uh1jhjRihM0 hjhubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjvih]hs64 new}(hhhjxihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjpiubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihM1 hjiubah}(h]h ]h"]h$]h&]uh1jhjpiubeh}(h]h ]h"]h$]h&]uh1jhjihM1 hjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjih]h Description}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjhubj6)}(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 (}(hIf (hjihhhNhNubjv)}(h**v**h]hv}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh == }(h == hjihhhNhNubjv)}(h**old**h]hold}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh), atomically updates }(h), atomically updates hjihhhNhNubjv)}(h**v**h]hv}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh to }(h to hjihhhNhNubjv)}(h**new**h]hnew}(hhhj jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjihhhNhNubjv)}(h**v**h]hv}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh is not modified, }(h is not modified, hjihhhNhNubjv)}(h**old**h]hold}(hhhj/jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh$ is updated to the current value of }(h$ is updated to the current value of hjihhhNhNubjv)}(h**v**h]hv}(hhhjBjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjhubj6)}(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.}(hj^jhj\jhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjhubj6)}(h **Return**h]jv)}(hjmjh]hReturn}(hhhjojhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9 hjhubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh if the exchange occured, }(h if the exchange occured, hjjhhhNhNubjv)}(h **false**h]hfalse}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh otherwise.}(h otherwise.hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9 hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_release (C function)c.atomic64_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME ubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjhhhjjhME ubh)}(hatomic64_try_cmpxchg_releaseh]h)}(hatomic64_try_cmpxchg_releaseh]hatomic64_try_cmpxchg_release}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhjjhME ubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkmodnameN classnameNjajd)}jg]jj)}j]jjsbc.atomic64_try_cmpxchg_releaseasbuh1hhj kubj9)}(h h]h }(hhhj3khhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj kubj~)}(hjh]h*}(hhhjAkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj kubh)}(hj h]hv}(hhhjNkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj kubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjkubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjikhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfkubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkkmodnameN classnameNjajd)}jg]j/kc.atomic64_try_cmpxchg_releaseasbuh1hhjbkubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbkubj~)}(hjh]h*}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbkubh)}(holdh]hold}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjkubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkmodnameN classnameNjajd)}jg]j/kc.atomic64_try_cmpxchg_releaseasbuh1hhjkubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkubh)}(hnewh]hnew}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjkubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhjjhME ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjjhME ubah}(h]jjah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQ hjjhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hjlhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhME ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j-lj3j-lj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj7lh]h Parameters}(hhhj9lhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5lubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hj1lubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjVlh]h atomic64_t *v}(hhhjXlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjPlubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjqlhjolhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjklhME hjllubah}(h]h ]h"]h$]h&]uh1jhjPlubeh}(h]h ]h"]h$]h&]uh1jhjklhME hjMlubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j<)}(hjlh]hs64 *old}(hhhjlhhhNhNubah}(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.hhMF hjlubj)}(hhh]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMF hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMF hjMlubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjlh]hs64 new}(hhhjlhhhNhNubah}(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.hhMG hjlubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMG hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMG hjMlubeh}(h]h ]h"]h$]h&]uh1jhj1lubj6)}(h**Description**h]jv)}(hjmh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hj1lubj6)}(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 (}(hIf (hjmhhhNhNubjv)}(h**v**h]hv}(hhhj"mhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh == }(h == hjmhhhNhNubjv)}(h**old**h]hold}(hhhj5mhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh), atomically updates }(h), atomically updates hjmhhhNhNubjv)}(h**v**h]hv}(hhhjHmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh to }(h to hjmhhhNhNubjv)}(h**new**h]hnew}(hhhj[mhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjmhhhNhNubjv)}(h**v**h]hv}(hhhjnmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh is not modified, }(h is not modified, hjmhhhNhNubjv)}(h**old**h]hold}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh$ is updated to the current value of }(h$ is updated to the current value of hjmhhhNhNubjv)}(h**v**h]hv}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hj1lubj6)}(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.}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMM hj1lubj6)}(h **Return**h]jv)}(hjmh]hReturn}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMO hj1lubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh if the exchange occured, }(h if the exchange occured, hjmhhhNhNubjv)}(h **false**h]hfalse}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh otherwise.}(h otherwise.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMO hj1lubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_relaxed (C function)c.atomic64_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj&nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"nhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ ubj9)}(h h]h }(hhhj4nhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"nhhhj3nhM\ ubh)}(hatomic64_try_cmpxchg_relaxedh]h)}(hatomic64_try_cmpxchg_relaxedh]hatomic64_try_cmpxchg_relaxed}(hhhjFnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBnubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"nhhhj3nhM\ ubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjenhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgnmodnameN classnameNjajd)}jg]jj)}j]jHnsbc.atomic64_try_cmpxchg_relaxedasbuh1hhj^nubj9)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^nubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^nubh)}(hj h]hv}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^nubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjZnubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjnmodnameN classnameNjajd)}jg]jnc.atomic64_try_cmpxchg_relaxedasbuh1hhjnubj9)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjnubh)}(holdh]hold}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjZnubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj oubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]jnc.atomic64_try_cmpxchg_relaxedasbuh1hhj oubj9)}(h h]h }(hhhj.ohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj oubh)}(hnewh]hnew}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'qubh otherwise.}(h otherwise.hj'qhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMf hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_sub_and_test (C function)c.atomic64_sub_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjxqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtqhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMr ubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtqhhhjqhMr ubh)}(hatomic64_sub_and_testh]h)}(hatomic64_sub_and_testh]hatomic64_sub_and_test}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjtqhhhjqhMr ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqmodnameN classnameNjajd)}jg]jj)}j]jqsbc.atomic64_sub_and_testasbuh1hhjqubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqubh)}(hj\h]hi}(hhhjqhhhNhNubah}(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}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjrmodnameN classnameNjajd)}jg]jqc.atomic64_sub_and_testasbuh1hhjqubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqubj~)}(hjh]h*}(hhhj,rhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjqubh)}(hj h]hv}(hhhj9rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjqubeh}(h]h ]h"]h$]h&]jj uh1jhjtqhhhjqhMr ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjpqhhhjqhMr ubah}(h]jkqah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjmqhhubj)}(hhh]j6)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjerhjcrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hj`rhhubah}(h]h ]h"]h$]h&]uh1jhjmqhhhjqhMr ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j{rj3j{rj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjrubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjrh]hs64 i}(hhhjrhhhNhNubah}(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.hhMr hjrubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMr hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMr hjrubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjrh]h atomic64_t *v}(hhhjrhhhNhNubah}(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.hhMs hjrubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMs hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMs hjrubeh}(h]h ]h"]h$]h&]uh1jhjrubj6)}(h**Description**h]jv)}(hjsh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjrubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj.shhhNhNubjv)}(h**v**h]hv}(hhhj7shhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.subh to (}(h to (hj.shhhNhNubjv)}(h**v**h]hv}(hhhjJshhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.subh - }(h - hj.shhhNhNubjv)}(h**i**h]hi}(hhhj]shhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.subh) with full ordering.}(h) with full ordering.hj.shhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjrubj6)}(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.}(hjyshjwshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMw hjrubj6)}(h **Return**h]jv)}(hjsh]hReturn}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjrubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh if the resulting value of }(h if the resulting value of hjshhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh is zero, }(h is zero, hjshhhNhNubjv)}(h **false**h]hfalse}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh otherwise.}(h otherwise.hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_dec_and_test (C function)c.atomic64_dec_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjshhhjthM ubh)}(hatomic64_dec_and_testh]h)}(hatomic64_dec_and_testh]hatomic64_dec_and_test}(hhhj"thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjthM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjAthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>tubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjCtmodnameN classnameNjajd)}jg]jj)}j]j$tsbc.atomic64_dec_and_testasbuh1hhj:tubj9)}(h h]h }(hhhjathhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:tubj~)}(hjh]h*}(hhhjothhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:tubh)}(hj h]hv}(hhhj|thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:tubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6tubah}(h]h ]h"]h$]h&]jj uh1jhjshhhjthM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjthM ubah}(h]jsah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjshhubj)}(hhh]j6)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjthM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjth]h Parameters}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjth]h atomic64_t *v}(hhhjthhhNhNubah}(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 hjtubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthM hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthM hjtubah}(h]h ]h"]h$]h&]uh1jhjtubj6)}(h**Description**h]jv)}(hj"uh]h Description}(hhhj$uhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj uubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hj8uhhhNhNubjv)}(h**v**h]hv}(hhhjAuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8uubh to (}(h to (hj8uhhhNhNubjv)}(h**v**h]hv}(hhhjTuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8uubh - 1) with full ordering.}(h - 1) with full ordering.hj8uhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubj6)}(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.}(hjpuhjnuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubj6)}(h **Return**h]jv)}(hjuh]hReturn}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}uubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh if the resulting value of }(h if the resulting value of hjuhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh is zero, }(h is zero, hjuhhhNhNubjv)}(h **false**h]hfalse}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh otherwise.}(h otherwise.hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_inc_and_test (C function)c.atomic64_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuhhhjvhM ubh)}(hatomic64_inc_and_testh]h)}(hatomic64_inc_and_testh]hatomic64_inc_and_test}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjvhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj8vhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5vubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:vmodnameN classnameNjajd)}jg]jj)}j]jvsbc.atomic64_inc_and_testasbuh1hhj1vubj9)}(h h]h }(hhhjXvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1vubj~)}(hjh]h*}(hhhjfvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1vubh)}(hj h]hv}(hhhjsvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1vubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-vubah}(h]h ]h"]h$]h&]jj uh1jhjuhhhjvhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjvhM ubah}(h]juah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuhhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjvhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jvj3jvj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjvh]h Parameters}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjvhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhjvubj6)}(h**Description**h]jv)}(hjwh]h Description}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hj/whhhNhNubjv)}(h**v**h]hv}(hhhj8whhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/wubh to (}(h to (hj/whhhNhNubjv)}(h**v**h]hv}(hhhjKwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/wubh + 1) with full ordering.}(h + 1) with full ordering.hj/whhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj6)}(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.}(hjgwhjewhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj6)}(h **Return**h]jv)}(hjvwh]hReturn}(hhhjxwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtwubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh if the resulting value of }(h if the resulting value of hjwhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh is zero, }(h is zero, hjwhhhNhNubjv)}(h **false**h]hfalse}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh otherwise.}(h otherwise.hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_add_negative (C function)c.atomic64_add_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwhhhjwhM ubh)}(hatomic64_add_negativeh]h)}(hatomic64_add_negativeh]hatomic64_add_negative}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj xubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjwhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj/xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,xubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1xmodnameN classnameNjajd)}jg]jj)}j]jxsbc.atomic64_add_negativeasbuh1hhj(xubj9)}(h h]h }(hhhjOxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(xubh)}(hj\h]hi}(hhhj]xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(xubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$xubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjxxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuxubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjzxmodnameN classnameNjajd)}jg]jKxc.atomic64_add_negativeasbuh1hhjqxubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqxubj~)}(hjh]h*}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjqxubh)}(hj h]hv}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqxubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$xubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjwhM ubah}(h]jwah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjwhhubj)}(hhh]j6)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jxj3jxj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjxh]h Parameters}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjyh]hs64 i}(hhhjyhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hj7yhj5yhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1yhM hj2yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj1yhM hjyubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjUyh]h atomic64_t *v}(hhhjWyhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOyubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjpyhjnyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjyhM hjkyubah}(h]h ]h"]h$]h&]uh1jhjOyubeh}(h]h ]h"]h$]h&]uh1jhjjyhM hjyubeh}(h]h ]h"]h$]h&]uh1jhjxubj6)}(h**Description**h]jv)}(hjyh]h Description}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjyhhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh to (}(h to (hjyhhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh + }(h + hjyhhhNhNubjv)}(h**i**h]hi}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh) with full ordering.}(h) with full ordering.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj6)}(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.}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh if the resulting value of }(h if the resulting value of hjzhhhNhNubjv)}(h**v**h]hv}(hhhj-zhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh is negative, }(h is negative, hjzhhhNhNubjv)}(h **false**h]hfalse}(hhhj@zhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh otherwise.}(h otherwise.hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_acquire (C function)c.atomic64_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjzzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvzhhhjzhM ubh)}(hatomic64_add_negative_acquireh]h)}(hatomic64_add_negative_acquireh]hatomic64_add_negative_acquire}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvzhhhjzhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjzmodnameN classnameNjajd)}jg]jj)}j]jzsbc.atomic64_add_negative_acquireasbuh1hhjzubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzubh)}(hj\h]hi}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{modnameN classnameNjajd)}jg]jzc.atomic64_add_negative_acquireasbuh1hhjzubj9)}(h h]h }(hhhj {hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzubj~)}(hjh]h*}(hhhj.{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjzubh)}(hj h]hv}(hhhj;{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjvzhhhjzhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrzhhhjzhM ubah}(h]jmzah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjozhhubj)}(hhh]j6)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjg{hje{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjb{hhubah}(h]h ]h"]h$]h&]uh1jhjozhhhjzhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j}{j3j}{j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj{h]h Parameters}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj{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]j6)}(hs64 value to addh]hs64 value to add}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{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}(hhhj{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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{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{ubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj0|hhhNhNubjv)}(h**v**h]hv}(hhhj9|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0|ubh to (}(h to (hj0|hhhNhNubjv)}(h**v**h]hv}(hhhjL|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0|ubh + }(h + hj0|hhhNhNubjv)}(h**i**h]hi}(hhhj_|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0|ubh) with acquire ordering.}(h) with acquire ordering.hj0|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj6)}(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.}(hj{|hjy|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj6)}(h **Return**h]jv)}(hj|h]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh if the resulting value of }(h if the resulting value of hj|hhhNhNubjv)}(h**v**h]hv}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh is negative, }(h is negative, hj|hhhNhNubjv)}(h **false**h]hfalse}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh otherwise.}(h otherwise.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_release (C function)c.atomic64_add_negative_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}hhhj}hM ubh)}(hatomic64_add_negative_releaseh]h)}(hatomic64_add_negative_releaseh]hatomic64_add_negative_release}(hhhj$}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}(hhhjC}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@}ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjE}modnameN classnameNjajd)}jg]jj)}j]j&}sbc.atomic64_add_negative_releaseasbuh1hhj<}ubj9)}(h h]h }(hhhjc}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<}ubh)}(hj\h]hi}(hhhjq}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj8}ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj}modnameN classnameNjajd)}jg]j_}c.atomic64_add_negative_releaseasbuh1hhj}ubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj~)}(hjh]h*}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}ubh)}(hj h]hv}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj8}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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|hhubj)}(hhh]j6)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j~j3j~j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj0~h]hs64 i}(hhhj2~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]j6)}(hs64 value to addh]hs64 value to add}(hjK~hjI~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjE~hM hjF~ubah}(h]h ]h"]h$]h&]uh1jhj*~ubeh}(h]h ]h"]h$]h&]uh1jhjE~hM hj'~ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hji~h]h atomic64_t *v}(hhhjk~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjg~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjc~ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhjc~ubeh}(h]h ]h"]h$]h&]uh1jhj~~hM hj'~ubeh}(h]h ]h"]h$]h&]uh1jhj ~ubj6)}(h**Description**h]jv)}(hj~h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ~ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj~hhhNhNubjv)}(h**v**h]hv}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh to (}(h to (hj~hhhNhNubjv)}(h**v**h]hv}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh + }(h + hj~hhhNhNubjv)}(h**i**h]hi}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubh) with release ordering.}(h) with release ordering.hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ~ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ~ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ~ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh if the resulting value of }(h if the resulting value of hj*hhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh is negative, }(h is negative, hj*hhhNhNubjv)}(h **false**h]hfalse}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh otherwise.}(h otherwise.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_relaxed (C function)c.atomic64_add_negative_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hatomic64_add_negative_relaxedh]h)}(hatomic64_add_negative_relaxedh]hatomic64_add_negative_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_add_negative_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_add_negative_relaxedasbuh1hhjubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjOhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjՀhjӀhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjπ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<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj.h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjDhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh to (}(h to (hjDhhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh + }(h + hjDhhhNhNubjv)}(h**i**h]hi}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh) with relaxed ordering.}(h) with relaxed ordering.hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjˁhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjށhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_add_unless (C function)c.atomic64_fetch_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj<hM ubh)}(hatomic64_fetch_add_unlessh]h)}(hj9h]hatomic64_fetch_add_unless}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(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}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]j7c.atomic64_fetch_add_unlessasbuh1hhjfubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjfubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubj$)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjÂmodnameN classnameNjajd)}jg]j7c.atomic64_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhj߂hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubj$)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]j7c.atomic64_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjQh]hu}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj<hM ubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj hhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jvj3jvj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjڃ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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjubeh}(h]h ]h"]h$]h&]uh1jhjzubj6)}(h**Description**h]jv)}(hjLh]h Description}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjbhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh != }(h != hjbhhhNhNubjv)}(h**u**h]hu}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh), atomically updates }(h), atomically updates hjbhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh to (}(h to (hjbhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh + }(h + hjbhhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjbhhhNhNubjv)}(h**v**h]hv}(hhhjʄhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic64_add_unless (C function)c.atomic64_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIhhhjZhM ubh)}(hatomic64_add_unlessh]h)}(hatomic64_add_unlessh]hatomic64_add_unless}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjZhM ubj)}(h(atomic64_t *v, s64 a, s64 u)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]josbc.atomic64_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjDžhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߅ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.atomic64_add_unlessasbuh1hhjۅubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjۅubh)}(hj&h]ha}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۅubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jc.atomic64_add_unlessasbuh1hhj"ubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hjQh]hu}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjIhhhjZhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjZhM ubah}(h]j@ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjBhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|hhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj†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.hhM hjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjۆhjنhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjՆ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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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<)}(hj2h]hs64 u}(hhhj4hhhNhNubah}(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.hhM hj,ubj)}(hhh]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhM hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjmh]h Description}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjŇhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**a**h]ha}(hhhj؇hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh if }(h if hj,hhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh was updated, }(h was updated, hj,hhhNhNubjv)}(h **false**h]hfalse}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh otherwise.}(h otherwise.hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_inc_not_zero (C function)c.atomic64_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hatomic64_inc_not_zeroh]h)}(hatomic64_inc_not_zeroh]hatomic64_inc_not_zero}(hhhjhhhNhNubah}(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}(hhhjψhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̈ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjшmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_inc_not_zeroasbuh1hhjȈubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjȈubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjȈubh)}(hj h]hv}(hhhj 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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM& hjhhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jLj3jLj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjPubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjuh]h atomic64_t *v}(hhhjwhhhNhNubah}(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 hjoubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM hjlubah}(h]h ]h"]h$]h&]uh1jhjPubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjPubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjƉhhhNhNubjv)}(h**v**h]hv}(hhhjωhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƉubh != 0), atomically updates }(h != 0), atomically updates hjƉhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƉubh to (}(h to (hjƉhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƉubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjƉhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƉubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjƉhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjPubj6)}(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$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjPubj6)}(h **Return**h]jv)}(hj3h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hjPubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh if }(h if hjIhhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh was updated, }(h was updated, hjIhhhNhNubjv)}(h **false**h]hfalse}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh otherwise.}(h otherwise.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_inc_unless_negative (C function)c.atomic64_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h1bool atomic64_inc_unless_negative (atomic64_t *v)h]h)}(h0bool atomic64_inc_unless_negative(atomic64_t *v)h](j)}(hjh]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM0 ubh)}(hatomic64_inc_unless_negativeh]h)}(hatomic64_inc_unless_negativeh]hatomic64_inc_unless_negative}(hhhj͊hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɊubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM0 ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jϊsbc.atomic64_inc_unless_negativeasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM0 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM0 ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9 hjhhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ hjNhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjsh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjmubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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.hhM0 hjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM0 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0 hjubah}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h**Description**h]jv)}(hj͋h]h Description}(hhhjϋhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjˋubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjmubj6)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh >= 0), atomically updates }(h >= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjmubj6)}(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.}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5 hjmubj6)}(h **Return**h]jv)}(hjPh]hReturn}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjmubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh if }(h if hjfhhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh was updated, }(h was updated, hjfhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh otherwise.}(h otherwise.hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_dec_unless_positive (C function)c.atomic64_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h1bool atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h0bool atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hhhjʌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƌhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMC ubj9)}(h h]h }(hhhj،hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjƌhhhj׌hMC ubh)}(hatomic64_dec_unless_positiveh]h)}(hatomic64_dec_unless_positiveh]hatomic64_dec_unless_positive}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjƌhhhj׌hMC ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic64_dec_unless_positiveasbuh1hhjubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjƌhhhj׌hMC ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjŒhhhj׌hMC ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hjhhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB hjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj׌hMC ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjʍhjȍhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjčhMC hjōubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjčhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh <= 0), atomically updates }(h <= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjubj6)}(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.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjubj6)}(h **Return**h]jv)}(hjmh]hReturn}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_dec_if_positive (C function)c.atomic64_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]atomic64_dec_if_positivesbc.atomic64_dec_if_positiveasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMV ubh)}(hatomic64_dec_if_positiveh]h)}(hjh]hatomic64_dec_if_positive}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMV ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jc.atomic64_dec_if_positiveasbuh1hhj5ubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMV ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjߎhhhj hMV ubah}(h]jڎah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_ hj܎hhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hjhhubah}(h]h ]h"]h$]h&]uh1jhj܎hhhj hMV ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjÏhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMV hjubah}(h]h ]h"]h$]h&]uh1jhjڏubeh}(h]h ]h"]h$]h&]uh1jhjhMV hj׏ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjubj6)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj1hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh > 0), atomically updates }(h > 0), atomically updates hj1hhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh to (}(h to (hj1hhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hj1hhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjubj6)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hThe old value of (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1), regardless of whether }(h - 1), regardless of whether hjhhhNhNubjv)}(h**v**h]hv}(hhhjАhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated.}(h was updated.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_read (C function)c.atomic_long_readhNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMi ubh)}(hatomic_long_readh]h)}(hatomic_long_readh]hatomic_long_read}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMi ubj)}(h(const atomic_long_t *v)h]j$)}(hconst atomic_long_t *vh](j')}(hjn'h]hconst}(hhhjGhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjCubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjgmodnameN classnameNjajd)}jg]jj)}j]j-sbc.atomic_long_readasbuh1hhjCubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjCubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj?ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMi ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMi ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hjhhubj)}(hhh]j6)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj̑hjʑhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hjǑhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMi ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj 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 hjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMi hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMi hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjFh]h Description}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjubj6)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hAtomically loads the value of hj\hhhNhNubjv)}(h**v**h]hv}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh with relaxed ordering.}(h with relaxed ordering.hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_read_acquire (C function)c.atomic_long_read_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMz ubh)}(hatomic_long_read_acquireh]h)}(hatomic_long_read_acquireh]hatomic_long_read_acquire}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMz ubj)}(h(const atomic_long_t *v)h]j$)}(hconst atomic_long_t *vh](j')}(hjn'h]hconst}(hhhj%hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj!ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjEmodnameN classnameNjajd)}jg]jj)}j]j sbc.atomic_long_read_acquireasbuh1hhj!ubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hj h]hv}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMz ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMz ubah}(h]jےah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjݒhhubj)}(hhh]j6)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjhhubah}(h]h ]h"]h$]h&]uh1jhjݒhhhjhMz ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjʓh]h Parameters}(hhhj̓hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȓubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjēubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMz hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMz hjubah}(h]h ]h"]h$]h&]uh1jhjēubj6)}(h**Description**h]jv)}(hj$h]h Description}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjēubj6)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hAtomically loads the value of hj:hhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh with acquire ordering.}(h with acquire ordering.hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjēubj6)}(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.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjēubj6)}(h **Return**h]jv)}(hjnh]hReturn}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjēubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjēubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_set (C function)c.atomic_long_sethNtauh1hhjIhhhNhNubh)}(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}(hhhjƔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj”hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjՔhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj”hhhjԔhM ubh)}(hatomic_long_seth]h)}(hatomic_long_seth]hatomic_long_set}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj”hhhjԔhM 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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_setasbuh1hhjubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong ih](j)}(hlongh]hlong}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubh)}(hj\h]hi}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj”hhhjԔhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjԔhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjÕhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hlong value to assignh]hlong value to assign}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hM hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hM hjוubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hAtomically sets hjjhhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh to }(h to hjjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh with relaxed ordering.}(h with relaxed ordering.hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hNothing.h]hNothing.}(hjɖhjǖhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_long_set_release (C function)c.atomic_long_set_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hatomic_long_set_releaseh]h)}(hatomic_long_set_releaseh]hatomic_long_set_release}(hhhjhhhNhNubah}(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}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj8modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_set_releaseasbuh1hhj/ubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/ubj~)}(hjh]h*}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj/ubh)}(hj h]hv}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj+ubj$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h atomic set with release orderingh]h atomic set with release ordering}(hjїhjϗhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM hjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j<)}(hjIh]hlong i}(hhhjKhhhNhNubah}(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.hhM hjCubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hM hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjҘhjИhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߘubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_add (C function)c.atomic_long_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"hhhj4hM ubh)}(hatomic_long_addh]h)}(hatomic_long_addh]hatomic_long_add}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jIsbc.atomic_long_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjșhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjՙhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[ubeh}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjBhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hj7ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjyh]hatomic_long_t *v}(hhhj{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.hhM hjsubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjʚhhhNhNubjv)}(h**v**h]hv}(hhhjӚhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʚubh to (}(h to (hjʚhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʚubh + }(h + hjʚhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʚubh) with relaxed ordering.}(h) with relaxed ordering.hjʚhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hj$h]hReturn}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hNothing.h]hNothing.}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_add_return (C function)c.atomic_long_add_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjehhhjwhM ubh)}(hatomic_long_add_returnh]h)}(hatomic_long_add_returnh]hatomic_long_add_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjwhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj›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}(hhhjݛhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڛubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjߛmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_add_returnasbuh1hhj֛ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj֛ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj֛ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֛ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhjwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjwhM ubah}(h]j\ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^hhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj?hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjzubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjלhj՜hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjќhM hjҜubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjќhM hjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + }(h + hj hhhNhNubjv)}(h**i**h]hi}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with full ordering.}(h) with full ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj6)}(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.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj6)}(h **Return**h]jv)}(hjgh]hReturn}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh.}(hjPhj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_acquire (C function) c.atomic_long_add_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjΝhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj͝hM ubh)}(hatomic_long_add_return_acquireh]h)}(hatomic_long_add_return_acquireh]hatomic_long_add_return_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_add_return_acquireasbuh1hhj,ubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hj h]hv}(hhhjnhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj۞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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hjОubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjMh]h Description}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjchhhNhNubjv)}(h**v**h]hv}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh to (}(h to (hjchhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh + }(h + hjchhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh) with acquire ordering.}(h) with acquire ordering.hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjӟhhhNhNubjv)}(h**v**h]hv}(hhhjܟhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӟubh.}(hjPhjӟhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_release (C function) c.atomic_long_add_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj#hM ubh)}(hatomic_long_add_return_releaseh]h)}(hatomic_long_add_return_releaseh]hatomic_long_add_return_release}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj#hM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubh)}(hj\h]hi}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j8sb c.atomic_long_add_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjĠhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj#hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj#hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj hhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj/h]hlong i}(hhhj1hhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhM hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM hj&ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjhh]hatomic_long_t *v}(hhhjjhhhNhNubah}(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.hhM hjbubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hM hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj¡hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjաhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj)hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh.}(hjPhj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_relaxed (C function) c.atomic_long_add_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjghhhjyhM ubh)}(hatomic_long_add_return_relaxedh]h)}(hatomic_long_add_return_relaxedh]hatomic_long_add_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjyhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjĢ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}(hhhjߢhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܢubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_add_return_relaxedasbuh1hhjآubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjآubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjآubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjآubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjyhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjyhM ubah}(h]j^ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj٣hjףhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjӣhM hjԣubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjӣhM hj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj6)}(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.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj6)}(h **Return**h]jv)}(hjih]hReturn}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_add (C function)c.atomic_long_fetch_addhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjФhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjϤhM ubh)}(hatomic_long_fetch_addh]h)}(hatomic_long_fetch_addh]hatomic_long_fetch_add}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_addasbuh1hhj.ubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubh)}(hj h]hv}(hhhjphhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjݥ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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hM hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM hjҥubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjOh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjehhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh to (}(h to (hjehhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh + }(h + hjehhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh) with full ordering.}(h) with full ordering.hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjզhhhNhNubjv)}(h**v**h]hv}(hhhjަhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjզubh.}(hjPhjզhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_add_acquire (C function)c.atomic_long_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(hlong 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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM{ ubh)}(hatomic_long_sub_return_acquireh]h)}(hatomic_long_sub_return_acquireh]hatomic_long_sub_return_acquire}(hhhjӲhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϲubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM{ ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj 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}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj(modnameN classnameNjajd)}jg]jj)}j]jղsb c.atomic_long_sub_return_acquireasbuh1hhjubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjahhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM{ ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj̳h]hlong i}(hhhjγ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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM{ 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM| hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM| hjóubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjVhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh to (}(h to (hjVhhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh - }(h - hjVhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh) with acquire ordering.}(h) with acquire ordering.hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjƴhhhNhNubjv)}(h**v**h]hv}(hhhjϴhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƴubh.}(hjPhjƴhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_sub_return_release (C function) c.atomic_long_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hatomic_long_sub_return_releaseh]h)}(hatomic_long_sub_return_releaseh]hatomic_long_sub_return_release}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hj\h]hi}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj=ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]jj)}j]j+sb c.atomic_long_sub_return_releaseasbuh1hhjuubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjuubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj"h]hlong i}(hhhj$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]j6)}(hlong value to subtracth]hlong value to subtract}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hM hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM 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}(hhhj]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.hhM hjUubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjȶhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhj۶hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_sub_return_relaxed (C function) c.atomic_long_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjlhM ubh)}(hatomic_long_sub_return_relaxedh]h)}(hatomic_long_sub_return_relaxedh]hatomic_long_sub_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjҷhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϷubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjԷmodnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_sub_return_relaxedasbuh1hhj˷ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj˷ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj˷ubh)}(hj h]hv}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˷ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhM ubah}(h]jQah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjShhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj4hhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjYh]h Parameters}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hjxh]hlong i}(hhhjzhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj̸hjʸhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjƸhM hjǸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƸhM hjoubeh}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(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.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(h **Return**h]jv)}(hj\h]hReturn}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjrhhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh.}(hjPhjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_sub (C function)c.atomic_long_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjùhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj¹hM ubh)}(hatomic_long_fetch_subh]h)}(hatomic_long_fetch_subh]hatomic_long_fetch_sub}(hhhjչ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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj 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}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]jj)}j]j׹sbc.atomic_long_fetch_subasbuh1hhj!ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hj h]hv}(hhhjchhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjκh]hlong i}(hhhjк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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhj 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.hhM hjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjźubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjBh]h Description}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjXhhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh to (}(h to (hjXhhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh - }(h - hjXhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh) with full ordering.}(h) with full ordering.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjȻhhhNhNubjv)}(h**v**h]hv}(hhhjѻhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȻubh.}(hjPhjȻhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_sub_acquire (C function)c.atomic_long_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_acquire (long i, atomic_long_t *v)h]h)}(hAtomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjChhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh to (}(h to (hjChhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_inc_return (C function)c.atomic_long_inc_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hatomic_long_inc_returnh]h)}(hatomic_long_inc_returnh]hatomic_long_inc_return}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_inc_returnasbuh1hhjubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjJhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with full ordering.}(h + 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjchhhNhNubjv)}(h**v**h]hv}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh.}(hjPhjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_acquire (C function) c.atomic_long_inc_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_long_inc_return_acquireh]h)}(hatomic_long_inc_return_acquireh]hatomic_long_inc_return_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_inc_return_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj 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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jbj3jbj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjfubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjfubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjfubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hjfubj6)}(h **Return**h]jv)}(hj#h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjfubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj9hhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh.}(hjPhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_release (C function) c.atomic_long_inc_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwhhhjhM0ubh)}(hatomic_long_inc_return_releaseh]h)}(hatomic_long_inc_return_releaseh]hatomic_long_inc_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhM0ubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_inc_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjwhhhjhM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjhM0ubah}(h]jnah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjphhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjah]hatomic_long_t *v}(hhhjchhhNhNubah}(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.hhM0hj[ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhM0hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM0hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj<ubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with release ordering.}(h + 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj<ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hj<ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj<ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_relaxed (C function) c.atomic_long_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMhhhj_hMBubh)}(hatomic_long_inc_return_relaxedh]h)}(hatomic_long_inc_return_relaxedh]hatomic_long_inc_return_relaxed}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhj_hMBubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jtsb c.atomic_long_inc_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjMhhhj_hMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj_hMBubah}(h]jDah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjFhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMBubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj7h]hatomic_long_t *v}(hhhj9hhhNhNubah}(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.hhMBhj1ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhMBhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMBhj.ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjrh]h Description}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_inc (C function)c.atomic_long_fetch_inchNtauh1hhjIhhhNhNubh)}(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}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMSubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj5hMSubh)}(hatomic_long_fetch_inch]h)}(hatomic_long_fetch_inch]hatomic_long_fetch_inc}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj5hMSubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjimodnameN classnameNjajd)}jg]jj)}j]jJsbc.atomic_long_fetch_incasbuh1hhj`ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj`ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj\ubah}(h]h ]h"]h$]h&]jj uh1jhj#hhhj5hMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj5hMSubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMSubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj h]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMShj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMShjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjHh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hj^hhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh to (}(h to (hj^hhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh + 1) with full ordering.}(h + 1) with full ordering.hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_acquire (C function)c.atomic_long_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMeubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMeubh)}(hatomic_long_fetch_inc_acquireh]h)}(hatomic_long_fetch_inc_acquireh]hatomic_long_fetch_inc_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMeubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jj)}j]j sbc.atomic_long_fetch_inc_acquireasbuh1hhj6ubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubj~)}(hjh]h*}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6ubh)}(hj h]hv}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMeubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hj4hhhNhNubjv)}(h**v**h]hv}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh to (}(h to (hj4hhhNhNubjv)}(h**v**h]hv}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubj6)}(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.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjubj6)}(h **Return**h]jv)}(hj{h]hReturn}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_release (C function)c.atomic_long_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMvubh)}(hatomic_long_fetch_inc_releaseh]h)}(hatomic_long_fetch_inc_releaseh]hatomic_long_fetch_inc_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMvubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_inc_releaseasbuh1hhj ubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjuhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMvubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + 1) with release ordering.}(h + 1) with release ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubj6)}(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.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubj6)}(h **Return**h]jv)}(hjQh]hReturn}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjghhhNhNubjv)}(h**v**h]hv}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh.}(hjPhjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_relaxed (C function)c.atomic_long_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_long_fetch_inc_relaxedh]h)}(hatomic_long_fetch_inc_relaxedh]hatomic_long_fetch_inc_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_inc_relaxedasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj$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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjPhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jfj3jfj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjph]h Parameters}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubj6)}(h **Return**h]jv)}(hj'h]hReturn}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj=hhhNhNubjv)}(h**v**h]hv}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh.}(hjPhj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_dec (C function)c.atomic_long_dechNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{hhhjhMubh)}(hatomic_long_dech]h)}(hatomic_long_dech]hatomic_long_dec}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_decasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjthhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j<j3j<j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjFh]h Parameters}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjeh]hatomic_long_t *v}(hhhjghhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_dec_return (C function)c.atomic_long_dec_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>hhhjPhMubh)}(hatomic_long_dec_returnh]h)}(hatomic_long_dec_returnh]hatomic_long_dec_return}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhjPhMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jesbc.atomic_long_dec_returnasbuh1hhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjwubah}(h]h ]h"]h$]h&]jj uh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7hhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj*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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh to (}(h to (hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh - 1) with full ordering.}(h - 1) with full ordering.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_acquire (C function) c.atomic_long_dec_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj&hMubh)}(hatomic_long_dec_return_acquireh]h)}(hatomic_long_dec_return_acquireh]hatomic_long_dec_return_acquire}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(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}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjZmodnameN classnameNjajd)}jg]jj)}j]j;sb c.atomic_long_dec_return_acquireasbuh1hhjQubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjQubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjQubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj9h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjOhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh to (}(h to (hjOhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_release (C function) c.atomic_long_dec_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_long_dec_return_releaseh]h)}(hatomic_long_dec_return_releaseh]hatomic_long_dec_return_release}(hhhjhhhNhNubah}(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}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_dec_return_releaseasbuh1hhj'ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'ubj~)}(hjh]h*}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj'ubh)}(hj h]hv}(hhhjihhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hj%hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh to (}(h to (hj%hhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh - 1) with release ordering.}(h - 1) with release ordering.hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjlh]hReturn}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_relaxed (C function) c.atomic_long_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_long_dec_return_relaxedh]h)}(hatomic_long_dec_return_relaxedh]hatomic_long_dec_return_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.atomic_long_dec_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj?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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjBh]hReturn}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjXhhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh.}(hjPhjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_dec (C function)c.atomic_long_fetch_dechNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hatomic_long_fetch_dech]h)}(hatomic_long_fetch_dech]hatomic_long_fetch_dec}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_decasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jWj3jWj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjah]h Parameters}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj6)}(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.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj.hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh.}(hjPhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_acquire (C function)c.atomic_long_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlhhhj~hMubh)}(hatomic_long_fetch_dec_acquireh]h)}(hatomic_long_fetch_dec_acquireh]hatomic_long_fetch_dec_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj~hMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_dec_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjehhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j-j3j-j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(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}(hhhjXhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_release (C function)c.atomic_long_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBhhhjThMubh)}(hatomic_long_fetch_dec_releaseh]h)}(hatomic_long_fetch_dec_releaseh]hatomic_long_fetch_dec_release}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjThMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jisbc.atomic_long_fetch_dec_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubah}(h]h ]h"]h$]h&]jj uh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhjThMubah}(h]j9ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;hhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjThMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj.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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjgh]h Description}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh to (}(h to (hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh - 1) with release ordering.}(h - 1) with release ordering.hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_relaxed (C function)c.atomic_long_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj*hM%ubh)}(hatomic_long_fetch_dec_relaxedh]h)}(hatomic_long_fetch_dec_relaxedh]hatomic_long_fetch_dec_relaxed}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(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}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]jj)}j]j?sbc.atomic_long_fetch_dec_relaxedasbuh1hhjUubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj*hM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj*hM%ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj=h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjShhhNhNubjv)}(h**v**h]hv}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh to (}(h to (hjShhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_and (C function)c.atomic_long_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM6ubh)}(hatomic_long_andh]h)}(hatomic_long_andh]hatomic_long_and}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM6ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubh)}(hj\h]hi}(hhhjKhhhNhNubah}(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}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_andasbuh1hhj_ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj'ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM6ubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM6ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj h]hlong i}(hhhjhhhNhNubah}(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.hhM6hjubj)}(hhh]j6)}(h long valueh]h long value}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hM6hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM6hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjEh]hatomic_long_t *v}(hhhjGhhhNhNubah}(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.hhM7hj?ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhM7hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_and (C function)c.atomic_long_fetch_andhNtauh1hhjIhhhNhNubh)}(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}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1hhhjChMHubh)}(hatomic_long_fetch_andh]h)}(hatomic_long_fetch_andh]hatomic_long_fetch_and}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjChMHubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jXsbc.atomic_long_fetch_andasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubeh}(h]h ]h"]h$]h&]jj uh1jhj1hhhjChMHubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjChMHubah}(h]j(ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhj*hhubj)}(hhh]j6)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhj hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMHubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j&j3j&j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj*ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjOh]hlong i}(hhhjQhhhNhNubah}(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.hhMHhjIubj)}(hhh]j6)}(h long valueh]h long value}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMHhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMHhjFubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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.hhMIhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj*ubj6)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj*ubj6)}(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.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhj*ubj6)}(h **Return**h]jv)}(hj3h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj*ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjIhhhNhNubjv)}(h**v**h]hv}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh.}(hjPhjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_and_acquire (C function)c.atomic_long_fetch_and_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_acquire (long i, atomic_long_t *v)h]h)}(hhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj^h]h Description}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hAtomically updates hjthhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh to (}(h to (hjthhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh & }(h & hjthhhNhNubjv)}(h**~i**h]h~i}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh) with full ordering.}(h) with full ordering.hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_acquire (C function)"c.atomic_long_fetch_andnot_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"hhhj4hMubh)}(h atomic_long_fetch_andnot_acquireh]h)}(h atomic_long_fetch_andnot_acquireh]h atomic_long_fetch_andnot_acquire}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jIsb"c.atomic_long_fetch_andnot_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj@h]hlong i}(hhhjBhhhNhNubah}(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]j6)}(h long valueh]h long value}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhMhjVubah}(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}(hhhj{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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**~i**h]h~i}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hj$h]hReturn}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj:hhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh.}(hjPhj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_release (C function)"c.atomic_long_fetch_andnot_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjhMubh)}(h atomic_long_fetch_andnot_releaseh]h)}(h atomic_long_fetch_andnot_releaseh]h atomic_long_fetch_andnot_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb"c.atomic_long_fetch_andnot_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmj3jmj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(h long valueh]h long value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh & }(h & hj hhhNhNubjv)}(h**~i**h]h~i}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with release ordering.}(h) with release ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(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.}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_relaxed (C function)"c.atomic_long_fetch_andnot_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h atomic_long_fetch_andnot_relaxedh]h)}(h atomic_long_fetch_andnot_relaxedh]h atomic_long_fetch_andnot_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhj+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}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHmodnameN classnameNjajd)}jg]jj)}j]jsb"c.atomic_long_fetch_andnot_relaxedasbuh1hhj?ubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubj~)}(hjh]h*}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?ubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(h long valueh]h long value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj%h]hatomic_long_t *v}(hhhj'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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjvhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh to (}(h to (hjvhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh & }(h & hjvhhhNhNubjv)}(h**~i**h]h~i}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh) with relaxed ordering.}(h) with relaxed ordering.hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_or (C function)c.atomic_long_orhNtauh1hhjIhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$hhhj6hMubh)}(hatomic_long_orh]h)}(hatomic_long_orh]hatomic_long_or}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj6hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jKsbc.atomic_long_orasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj]ubeh}(h]h ]h"]h$]h&]jj uh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjBh]hlong i}(hhhjDhhhNhNubah}(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]j6)}(h long valueh]h long value}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhj9ubj)}(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}(hhhj}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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh | }(h | hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hj&h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hNothing.h]hNothing.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!atomic_long_fetch_or (C function)c.atomic_long_fetch_orhNtauh1hhjIhhhNhNubh)}(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}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjghhhjyhMubh)}(hatomic_long_fetch_orh]h)}(hatomic_long_fetch_orh]hatomic_long_fetch_or}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjyhMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_fetch_orasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjyhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjyhMubah}(h]j^ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`hhubj)}(hhh]j6)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(h long valueh]h long value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj6)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh | }(h | hjhhhNhNubjv)}(h**i**h]hi}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj6)}(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.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj6)}(h **Return**h]jv)}(hjih]hReturn}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_or_acquire (C function)c.atomic_long_fetch_or_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(hubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjVhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh to (}(h to (hjVhhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh ^ }(h ^ hjVhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh) with release ordering.}(h) with release ordering.hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_xor_relaxed (C function)c.atomic_long_fetch_xor_relaxedhNtauh1hhjIhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_xor_relaxed (long i, atomic_long_t *v)h]h)}(hlong atomic_long_cmpxchg(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjhhhj|hMubh)}(hatomic_long_cmpxchgh]h)}(hatomic_long_cmpxchgh]hatomic_long_cmpxchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhj|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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.atomic_long_cmpxchgasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2ubh)}(hnewh]hnew}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjchhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hjh]hlong old}(hhhjhhhNhNubah}(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]j6)}(hlong value to compare withh]hlong value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj0h]hlong new}(hhhj2hhhNhNubah}(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]j6)}(hlong value to assignh]hlong value to assign}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjkh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_cmpxchg_acquire (C function)c.atomic_long_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUhhhjghMubh)}(hatomic_long_cmpxchg_acquireh]h)}(hatomic_long_cmpxchg_acquireh]hatomic_long_cmpxchg_acquire}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjghMubj)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j|sbc.atomic_long_cmpxchg_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjUhhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjghMubah}(h]jLah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjghMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hjh]hlong old}(hhhjhhhNhNubah}(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]j6)}(hlong value to compare withh]hlong value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj h]hlong new}(hhhj 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]j6)}(hlong value to assignh]hlong value to assign}(hj6 hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0 hMhj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj0 hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjV h]h Description}(hhhjX hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjT ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjl hhhNhNubjv)}(h**v**h]hv}(hhhju hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl ubh == }(h == hjl hhhNhNubjv)}(h**old**h]hold}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl ubh), atomically updates }(h), atomically updates hjl hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl ubh to }(h to hjl hhhNhNubjv)}(h**new**h]hnew}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl ubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjl hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjl hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj!hhhNhNubjv)}(h**v**h]hv}(hhhj !hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubh.}(hjPhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_cmpxchg_release (C function)c.atomic_long_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjD!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjS!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@!hhhjR!hMubh)}(hatomic_long_cmpxchg_releaseh]h)}(hatomic_long_cmpxchg_releaseh]hatomic_long_cmpxchg_release}(hhhje!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@!hhhjR!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}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]jg!sbc.atomic_long_cmpxchg_releaseasbuh1hhj}!ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}!ubj~)}(hjh]h*}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}!ubh)}(hj h]hv}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjy!ubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubh)}(holdh]hold}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjy!ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj "hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubh)}(hnewh]hnew}(hhhj("hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjy!ubeh}(h]h ]h"]h$]h&]jj uh1jhj@!hhhjR!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+$hhhj=$hM.ubh)}(hatomic_long_cmpxchg_relaxedh]h)}(hatomic_long_cmpxchg_relaxedh]hatomic_long_cmpxchg_relaxed}(hhhjP$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+$hhhj=$hM.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}(hhhjo$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjq$modnameN classnameNjajd)}jg]jj)}j]jR$sbc.atomic_long_cmpxchg_relaxedasbuh1hhjh$ubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjh$ubj~)}(hjh]h*}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjh$ubh)}(hj h]hv}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjd$ubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh)}(holdh]hold}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjd$ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh)}(hnewh]hnew}(hhhj%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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj$$hhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj@%hj>%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2jV%j3jV%j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj`%h]h Parameters}(hhhjb%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^%ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjZ%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}(hhhj%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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hM.hj%ubah}(h]h ]h"]h$]h&]uh1jhjy%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM.hjv%ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j<)}(hj%h]hlong old}(hhhj%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]j6)}(hlong value to compare withh]hlong value to compare with}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hM/hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM/hjv%ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj%h]hlong new}(hhhj%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.hhM0hj%ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj &hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hM0hj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hM0hjv%ubeh}(h]h ]h"]h$]h&]uh1jhjZ%ubj6)}(h**Description**h]jv)}(hj,&h]h Description}(hhhj.&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*&ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjZ%ubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjB&hhhNhNubjv)}(h**v**h]hv}(hhhjK&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB&ubh == }(h == hjB&hhhNhNubjv)}(h**old**h]hold}(hhhj^&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB&ubh), atomically updates }(h), atomically updates hjB&hhhNhNubjv)}(h**v**h]hv}(hhhjq&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB&ubh to }(h to hjB&hhhNhNubjv)}(h**new**h]hnew}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB&ubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjB&hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB&ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjB&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjZ%ubj6)}(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&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjZ%ubj6)}(h **Return**h]jv)}(hj&h]hReturn}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjZ%ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj&hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh.}(hjPhj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjZ%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_long_try_cmpxchg (C function)c.atomic_long_try_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBubj9)}(h h]h }(hhhj('hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'hhhj''hMBubh)}(hatomic_long_try_cmpxchgh]h)}(hatomic_long_try_cmpxchgh]hatomic_long_try_cmpxchg}(hhhj:'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj''hMBubj)}(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}(hhhjY'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV'ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj['modnameN classnameNjajd)}jg]jj)}j]j<'sbc.atomic_long_try_cmpxchgasbuh1hhjR'ubj9)}(h h]h }(hhhjy'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjR'ubj~)}(hjh]h*}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjR'ubh)}(hj h]hv}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjN'ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'ubj~)}(hjh]h*}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj'ubh)}(holdh]hold}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjN'ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'ubh)}(hnewh]hnew}(hhhj (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''hMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj''hMBubah}(h]j 'ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhj'hhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj7(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj2(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj''hMBubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jM(j3jM(j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjW(h]h Parameters}(hhhjY(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU(ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjQ(ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjv(h]hatomic_long_t *v}(hhhjx(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.hhMBhjp(ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMBhj(ubah}(h]h ]h"]h$]h&]uh1jhjp(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMBhjm(ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j<)}(hj(h]h long *old}(hhhj(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]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMChj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMChjm(ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj(h]hlong new}(hhhj(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.hhMDhj(ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMDhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMDhjm(ubeh}(h]h ]h"]h$]h&]uh1jhjQ(ubj6)}(h**Description**h]jv)}(hj#)h]h Description}(hhhj%)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!)ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjQ(ubj6)}(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 (}(hIf (hj9)hhhNhNubjv)}(h**v**h]hv}(hhhjB)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh == }(h == hj9)hhhNhNubjv)}(h**old**h]hold}(hhhjU)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh), atomically updates }(h), atomically updates hj9)hhhNhNubjv)}(h**v**h]hv}(hhhjh)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh to }(h to hj9)hhhNhNubjv)}(h**new**h]hnew}(hhhj{)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hj9)hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh is not modified, }(h is not modified, hj9)hhhNhNubjv)}(h**old**h]hold}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh$ is updated to the current value of }(h$ is updated to the current value of hj9)hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9)ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj9)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjQ(ubj6)}(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)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjQ(ubj6)}(h **Return**h]jv)}(hj)h]hReturn}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjQ(ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh if the exchange occured, }(h if the exchange occured, hj)hhhNhNubjv)}(h **false**h]hfalse}(hhhj *hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh otherwise.}(h otherwise.hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjQ(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_acquire (C function)!c.atomic_long_try_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjF*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB*hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYubj9)}(h h]h }(hhhjT*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjB*hhhjS*hMYubh)}(hatomic_long_try_cmpxchg_acquireh]h)}(hatomic_long_try_cmpxchg_acquireh]hatomic_long_try_cmpxchg_acquire}(hhhjf*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjB*hhhjS*hMYubj)}(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}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]jj)}j]jh*sb!c.atomic_long_try_cmpxchg_acquireasbuh1hhj~*ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~*ubj~)}(hjh]h*}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~*ubh)}(hj h]hv}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjz*ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubj~)}(hjh]h*}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubh)}(holdh]hold}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjz*ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(h h]h }(hhhj(+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubh)}(hnewh]hnew}(hhhj6+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjz*ubeh}(h]h ]h"]h$]h&]jj uh1jhjB*hhhjS*hMYubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>*hhhjS*hMYubah}(h]j9*ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj;*hhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjc+hja+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhj^+hhubah}(h]h ]h"]h$]h&]uh1jhj;*hhhjS*hMYubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jy+j3jy+j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj+h]h Parameters}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj+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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+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}(hhhj+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]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMZhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMZhj+ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj,h]hlong new}(hhhj,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]j6)}(hlong value to assignh]hlong value to assign}(hj/,hj-,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj),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}+ubj6)}(h**Description**h]jv)}(hjO,h]h Description}(hhhjQ,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM,ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hj}+ubj6)}(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 (}(hIf (hje,hhhNhNubjv)}(h**v**h]hv}(hhhjn,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh == }(h == hje,hhhNhNubjv)}(h**old**h]hold}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh), atomically updates }(h), atomically updates hje,hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh to }(h to hje,hhhNhNubjv)}(h**new**h]hnew}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hje,hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh is not modified, }(h is not modified, hje,hhhNhNubjv)}(h**old**h]hold}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh$ is updated to the current value of }(h$ is updated to the current value of hje,hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje,ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hje,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hj}+ubj6)}(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.}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj}+ubj6)}(h **Return**h]jv)}(hj -h]hReturn}(hhhj -hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj -ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj}+ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj%-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!-ubh if the exchange occured, }(h if the exchange occured, hj!-hhhNhNubjv)}(h **false**h]hfalse}(hhhj8-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!-ubh otherwise.}(h otherwise.hj!-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj}+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_release (C function)!c.atomic_long_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjr-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMoubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjn-hhhj-hMoubh)}(hatomic_long_try_cmpxchg_releaseh]h)}(hatomic_long_try_cmpxchg_releaseh]hatomic_long_try_cmpxchg_release}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjn-hhhj-hMoubj)}(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}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}j]j-sb!c.atomic_long_try_cmpxchg_releaseasbuh1hhj-ubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-ubj~)}(hjh]h*}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-ubh)}(hj h]hv}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubj~)}(hjh]h*}(hhhj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubh)}(holdh]hold}(hhhj-.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjF.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB.ubj9)}(h h]h }(hhhjT.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjB.ubh)}(hnewh]hnew}(hhhjb.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-ubeh}(h]h ]h"]h$]h&]jj uh1jhjn-hhhj-hMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhjj-hhhj-hMoubah}(h]je-ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjg-hhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj.hhubah}(h]h ]h"]h$]h&]uh1jhjg-hhhj-hMoubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j.j3j.j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj.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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.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}(hhhj /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.hhMphj/ubj)}(hhh]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj"/hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMphj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMphj.ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj@/h]hlong new}(hhhjB/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.hhMqhj:/ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj[/hjY/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjU/hMqhjV/ubah}(h]h ]h"]h$]h&]uh1jhj:/ubeh}(h]h ]h"]h$]h&]uh1jhjU/hMqhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj6)}(h**Description**h]jv)}(hj{/h]h Description}(hhhj}/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjy/ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj.ubj6)}(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 (}(hIf (hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh == }(h == hj/hhhNhNubjv)}(h**old**h]hold}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh), atomically updates }(h), atomically updates hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh to }(h to hj/hhhNhNubjv)}(h**new**h]hnew}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh is not modified, }(h is not modified, hj/hhhNhNubjv)}(h**old**h]hold}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh$ is updated to the current value of }(h$ is updated to the current value of hj/hhhNhNubjv)}(h**v**h]hv}(hhhj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj.ubj6)}(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.}(hj(0hj&0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhj.ubj6)}(h **Return**h]jv)}(hj70h]hReturn}(hhhj90hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj50ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj.ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjQ0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM0ubh if the exchange occured, }(h if the exchange occured, hjM0hhhNhNubjv)}(h **false**h]hfalse}(hhhjd0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM0ubh otherwise.}(h otherwise.hjM0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_relaxed (C function)!c.atomic_long_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhj0hMubh)}(hatomic_long_try_cmpxchg_relaxedh]h)}(hatomic_long_try_cmpxchg_relaxedh]hatomic_long_try_cmpxchg_relaxed}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj0hMubj)}(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}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jj)}j]j0sb!c.atomic_long_try_cmpxchg_relaxedasbuh1hhj0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0ubj~)}(hjh]h*}(hhhj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0ubh)}(hj h]hv}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhj01hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,1ubj9)}(h h]h }(hhhj>1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,1ubj~)}(hjh]h*}(hhhjL1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,1ubh)}(holdh]hold}(hhhjY1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjr1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn1ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjn1ubh)}(hnewh]hnew}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj0ubeh}(h]h ]h"]h$]h&]jj uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhj0hMubah}(h]j0ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0hhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj1h]hatomic_long_t *v}(hhhj1hhhNhNubah}(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.hhMhj1ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j<)}(hj32h]h long *old}(hhhj52hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj12ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-2ubj)}(hhh]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjN2hjL2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjH2hMhjI2ubah}(h]h ]h"]h$]h&]uh1jhj-2ubeh}(h]h ]h"]h$]h&]uh1jhjH2hMhj1ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjl2h]hlong new}(hhhjn2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjf2ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjf2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hj2h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(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 (}(hIf (hj2hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh == }(h == hj2hhhNhNubjv)}(h**old**h]hold}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh), atomically updates }(h), atomically updates hj2hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh to }(h to hj2hhhNhNubjv)}(h**new**h]hnew}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hj2hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh is not modified, }(h is not modified, hj2hhhNhNubjv)}(h**old**h]hold}(hhhj%3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh$ is updated to the current value of }(h$ is updated to the current value of hj2hhhNhNubjv)}(h**v**h]hv}(hhhj83hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(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.}(hjT3hjR3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(h **Return**h]jv)}(hjc3h]hReturn}(hhhje3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja3ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj}3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjy3ubh if the exchange occured, }(h if the exchange occured, hjy3hhhNhNubjv)}(h **false**h]hfalse}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjy3ubh otherwise.}(h otherwise.hjy3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_sub_and_test (C function)c.atomic_long_sub_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3hhhj3hMubh)}(hatomic_long_sub_and_testh]h)}(hatomic_long_sub_and_testh]hatomic_long_sub_and_test}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hj\h]hi}(hhhj"4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj=4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?4modnameN classnameNjajd)}jg]jj)}j]j3sbc.atomic_long_sub_and_testasbuh1hhj64ubj9)}(h h]h }(hhhj]4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj64ubj~)}(hjh]h*}(hhhjk4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj64ubh)}(hj h]hv}(hhhjx4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj64ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3hhubj)}(hhh]j6)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j4j3j4j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj4h]h Parameters}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hj4h]hlong i}(hhhj4hhhNhNubah}(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.hhMhj4ubj)}(hhh]j6)}(hlong value to subtracth]hlong value to subtract}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj5h]hatomic_long_t *v}(hhhj5hhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj75hj55hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj15hMhj25ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj15hMhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubj6)}(h**Description**h]jv)}(hjW5h]h Description}(hhhjY5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU5ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjm5hhhNhNubjv)}(h**v**h]hv}(hhhjv5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjm5ubh to (}(h to (hjm5hhhNhNubjv)}(h**v**h]hv}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjm5ubh - }(h - hjm5hhhNhNubjv)}(h**i**h]hi}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjm5ubh) with full ordering.}(h) with full ordering.hjm5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj6)}(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.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh if the resulting value of }(h if the resulting value of hj5hhhNhNubjv)}(h**v**h]hv}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh is zero, }(h is zero, hj5hhhNhNubjv)}(h **false**h]hfalse}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh otherwise.}(h otherwise.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_dec_and_test (C function)c.atomic_long_dec_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjA6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjO6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=6hhhjN6hMubh)}(hatomic_long_dec_and_testh]h)}(hatomic_long_dec_and_testh]hatomic_long_dec_and_test}(hhhja6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=6hhhjN6hMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}6ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj6modnameN classnameNjajd)}jg]jj)}j]jc6sbc.atomic_long_dec_and_testasbuh1hhjy6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjy6ubj~)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjy6ubh)}(hj h]hv}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hju6ubah}(h]h ]h"]h$]h&]jj uh1jhj=6hhhjN6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj96hhhjN6hMubah}(h]j46ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj66hhubj)}(hhh]j6)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj66hhhjN6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j6j3j6j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj&7h]hatomic_long_t *v}(hhhj(7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 7ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjA7hj?7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;7hMhj<7ubah}(h]h ]h"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]uh1jhj;7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hja7h]h Description}(hhhjc7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjw7hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw7ubh to (}(h to (hjw7hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw7ubh - 1) with full ordering.}(h - 1) with full ordering.hjw7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj6)}(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.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj6)}(h **Return**h]jv)}(hj7h]hReturn}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh if the resulting value of }(h if the resulting value of hj7hhhNhNubjv)}(h**v**h]hv}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh is zero, }(h is zero, hj7hhhNhNubjv)}(h **false**h]hfalse}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh otherwise.}(h otherwise.hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_inc_and_test (C function)c.atomic_long_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhj88hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj48hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjF8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj48hhhjE8hMubh)}(hatomic_long_inc_and_testh]h)}(hatomic_long_inc_and_testh]hatomic_long_inc_and_test}(hhhjX8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj48hhhjE8hMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjw8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjy8modnameN classnameNjajd)}jg]jj)}j]jZ8sbc.atomic_long_inc_and_testasbuh1hhjp8ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjp8ubj~)}(hjh]h*}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjp8ubh)}(hj h]hv}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjl8ubah}(h]h ]h"]h$]h&]jj uh1jhj48hhhjE8hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj08hhhjE8hMubah}(h]j+8ah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-8hhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj-8hhhjE8hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj9h]hatomic_long_t *v}(hhhj9hhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj89hj69hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj29hMhj39ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj29hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hjX9h]h Description}(hhhjZ9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjV9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjn9hhhNhNubjv)}(h**v**h]hv}(hhhjw9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn9ubh to (}(h to (hjn9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn9ubh + 1) with full ordering.}(h + 1) with full ordering.hjn9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh if the resulting value of }(h if the resulting value of hj9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh is zero, }(h is zero, hj9hhhNhNubjv)}(h **false**h]hfalse}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh otherwise.}(h otherwise.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_add_negative (C function)c.atomic_long_add_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhj/:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj=:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+:hhhj<:hMubh)}(hatomic_long_add_negativeh]h)}(hatomic_long_add_negativeh]hatomic_long_add_negative}(hhhjO:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+:hhhj<:hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjk:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg:ubj9)}(h h]h }(hhhjy:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjg:ubh)}(hj\h]hi}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjc:ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]jj)}j]jQ:sbc.atomic_long_add_negativeasbuh1hhj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubj~)}(hjh]h*}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubh)}(hj h]hv}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjc: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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$:hhubj)}(hhh]j6)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj ;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j;j3j;j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj);h]h Parameters}(hhhj+;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj';ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hjH;h]hlong i}(hhhjJ;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]j6)}(hlong value to addh]hlong value to add}(hjc;hja;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj];hMhj^;ubah}(h]h ]h"]h$]h&]uh1jhjB;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}(hhhj;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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj{;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj?;ubeh}(h]h ]h"]h$]h&]uh1jhj#;ubj6)}(h**Description**h]jv)}(hj;h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#;ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh to (}(h to (hj;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh + }(h + hj;hhhNhNubjv)}(h**i**h]hi}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh) with full ordering.}(h) with full ordering.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#;ubj6)}(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<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#;ubj6)}(h **Return**h]jv)}(hj,<h]hReturn}(hhhj.<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*<ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#;ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjF<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB<ubh if the resulting value of }(h if the resulting value of hjB<hhhNhNubjv)}(h**v**h]hv}(hhhjY<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB<ubh is negative, }(h is negative, hjB<hhhNhNubjv)}(h **false**h]hfalse}(hhhjl<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB<ubh otherwise.}(h otherwise.hjB<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_acquire (C function)"c.atomic_long_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhj<hMubh)}(h atomic_long_add_negative_acquireh]h)}(h atomic_long_add_negative_acquireh]h atomic_long_add_negative_acquire}(hhhj<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}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<ubh)}(hj\h]hi}(hhhj<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}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=modnameN classnameNjajd)}jg]jj)}j]j<sb"c.atomic_long_add_negative_acquireasbuh1hhj=ubj9)}(h h]h }(hhhj9=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubj~)}(hjh]h*}(hhhjG=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=ubh)}(hj h]hv}(hhhjT=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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubj)}(hhh]j6)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj=hj~=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j=j3j=j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hl/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}(hhhj=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]j6)}(hlong value to addh]hlong value to add}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=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}(hhhj=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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj >hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj >hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h**Description**h]jv)}(hj3>h]h Description}(hhhj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjI>hhhNhNubjv)}(h**v**h]hv}(hhhjR>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI>ubh to (}(h to (hjI>hhhNhNubjv)}(h**v**h]hv}(hhhje>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI>ubh + }(h + hjI>hhhNhNubjv)}(h**i**h]hi}(hhhjx>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI>ubh) with acquire ordering.}(h) with acquire ordering.hjI>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj6)}(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.}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj6)}(h **Return**h]jv)}(hj>h]hReturn}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh if the resulting value of }(h if the resulting value of hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh is negative, }(h is negative, hj>hhhNhNubjv)}(h **false**h]hfalse}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh otherwise.}(h otherwise.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_release (C function)"c.atomic_long_add_negative_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhj+?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?hhhj*?hMubh)}(h atomic_long_add_negative_releaseh]h)}(h atomic_long_add_negative_releaseh]h atomic_long_add_negative_release}(hhhj=?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?hhhj*?hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjY?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU?ubj9)}(h h]h }(hhhjg?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjU?ubh)}(hj\h]hi}(hhhju?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjU?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQ?ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jj)}j]j??sb"c.atomic_long_add_negative_releaseasbuh1hhj?ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?ubh)}(hj h]hv}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQ?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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?hhubj)}(hhh]j6)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/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&]j1j,j2j @j3j @j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/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<)}(hj6@h]hlong i}(hhhj8@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.hhMhj0@ubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjQ@hjO@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjK@hMhjL@ubah}(h]h ]h"]h$]h&]uh1jhj0@ubeh}(h]h ]h"]h$]h&]uh1jhjK@hMhj-@ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjo@h]hatomic_long_t *v}(hhhjq@hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjm@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhji@ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhji@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj-@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh to (}(h to (hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh + }(h + hj@hhhNhNubjv)}(h**i**h]hi}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh) with release ordering.}(h) with release ordering.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(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 Ahj AhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(h **Return**h]jv)}(hjAh]hReturn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj4AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0Aubh if the resulting value of }(h if the resulting value of hj0AhhhNhNubjv)}(h**v**h]hv}(hhhjGAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0Aubh is negative, }(h is negative, hj0AhhhNhNubjv)}(h **false**h]hfalse}(hhhjZAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0Aubh otherwise.}(h otherwise.hj0AhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_relaxed (C function)"c.atomic_long_add_negative_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAhhhjAhM ubh)}(h atomic_long_add_negative_relaxedh]h)}(h atomic_long_add_negative_relaxedh]h atomic_long_add_negative_relaxed}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjAhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hj\h]hi}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj BmodnameN classnameNjajd)}jg]jj)}j]jAsb"c.atomic_long_add_negative_relaxedasbuh1hhjBubj9)}(h h]h }(hhhj'BhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBubj~)}(hjh]h*}(hhhj5BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjBubh)}(hj h]hv}(hhhjBBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(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&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAhhubj)}(hhh]j6)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjnBhjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjiBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjBh]0hlong i}(hhhjBhhhNhNubah}(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 hjBubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjBh]hatomic_long_t *v}(hhhjBhhhNhNubah}(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 hjBubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjChjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj6)}(h**Description**h]jv)}(hj!Ch]h Description}(hhhj#ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj7ChhhNhNubjv)}(h**v**h]hv}(hhhj@ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7Cubh to (}(h to (hj7ChhhNhNubjv)}(h**v**h]hv}(hhhjSChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7Cubh + }(h + hj7ChhhNhNubjv)}(h**i**h]hi}(hhhjfChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7Cubh) with relaxed ordering.}(h) with relaxed ordering.hj7ChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj6)}(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.}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj6)}(h **Return**h]jv)}(hjCh]hReturn}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh if the resulting value of }(h if the resulting value of hjChhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh is negative, }(h is negative, hjChhhNhNubjv)}(h **false**h]hfalse}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh otherwise.}(h otherwise.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_add_unless (C function)c.atomic_long_fetch_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhj DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDhhhjDhMubh)}(hatomic_long_fetch_add_unlessh]h)}(hatomic_long_fetch_add_unlessh]hatomic_long_fetch_add_unless}(hhhj,DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Dubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjDhMubj)}(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}(hhhjKDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHDubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMDmodnameN classnameNjajd)}jg]jj)}j]j.Dsbc.atomic_long_fetch_add_unlessasbuh1hhjDDubj9)}(h h]h }(hhhjkDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDDubj~)}(hjh]h*}(hhhjyDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDDubh)}(hj h]hv}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDDubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj@Dubj$)}(hlong ah](j)}(hlongh]hlong}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubh)}(hj&h]ha}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj@Dubj$)}(hlong uh](j)}(hlongh]hlong}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubh)}(hjQh]hu}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj@Dubeh}(h]h ]h"]h$]h&]jj uh1jhjDhhhjDhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjDhMubah}(h]jCah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjDhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j0Ej3j0Ej4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj:Eh]h Parameters}(hhhjbool 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}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2ubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGhhhjGhM2ubh)}(hatomic_long_add_unlessh]h)}(hatomic_long_add_unlessh]hatomic_long_add_unless}(hhhj'GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Gubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjGhM2ubj)}(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}(hhhjFGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCGubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHGmodnameN classnameNjajd)}jg]jj)}j]j)Gsbc.atomic_long_add_unlessasbuh1hhj?Gubj9)}(h h]h }(hhhjfGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?Gubj~)}(hjh]h*}(hhhjtGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?Gubh)}(hj h]hv}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?Gubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj;Gubj$)}(hlong ah](j)}(hlongh]hlong}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubh)}(hj&h]ha}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj;Gubj$)}(hlong uh](j)}(hlongh]hlong}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubh)}(hjQh]hu}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj;Gubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjGhM2ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjGhM2ubah}(h]jFah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjFhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjHhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjGhM2ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+Hj3j+Hj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5Hh]h Parameters}(hhhj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3Hubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj/Hubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjTHh]hatomic_long_t *v}(hhhjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjNHubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjoHhjmHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjiHhM2hjjHubah}(h]h ]h"]h$]h&]uh1jhjNHubeh}(h]h ]h"]h$]h&]uh1jhjiHhM2hjKHubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j<)}(hjHh]hlong a}(hhhjHhhhNhNubah}(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.hhM3hjHubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhM3hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM3hjKHubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j<)}(hjHh]hlong u}(hhhjHhhhNhNubah}(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.hhM4hjHubj)}(hhh]j6)}(hlong value to compare withh]hlong value to compare with}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhM4hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM4hjKHubeh}(h]h ]h"]h$]h&]uh1jhj/Hubj6)}(h**Description**h]jv)}(hjIh]h Description}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj/Hubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjIhhhNhNubjv)}(h**v**h]hv}(hhhj IhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh != }(h != hjIhhhNhNubjv)}(h**u**h]hu}(hhhj3IhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh), atomically updates }(h), atomically updates hjIhhhNhNubjv)}(h**v**h]hv}(hhhjFIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh to (}(h to (hjIhhhNhNubjv)}(h**v**h]hv}(hhhjYIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh + }(h + hjIhhhNhNubjv)}(h**a**h]ha}(hhhjlIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjIhhhNhNubjv)}(h**v**h]hv}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj/Hubj6)}(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.}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj/Hubj6)}(h **Return**h]jv)}(hjIh]hReturn}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj/Hubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh if }(h if hjIhhhNhNubjv)}(h**v**h]hv}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh was updated, }(h was updated, hjIhhhNhNubjv)}(h **false**h]hfalse}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh otherwise.}(h otherwise.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj/Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_inc_not_zero (C function)c.atomic_long_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhj$JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubj9)}(h h]h }(hhhj2JhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj Jhhhj1JhMGubh)}(hatomic_long_inc_not_zeroh]h)}(hatomic_long_inc_not_zeroh]hatomic_long_inc_not_zero}(hhhjDJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Jubah}(h]h ](jjeh"]h$]h&]jj uh1hhj Jhhhj1JhMGubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjcJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`Jubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjeJmodnameN classnameNjajd)}jg]jj)}j]jFJsbc.atomic_long_inc_not_zeroasbuh1hhj\Jubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\Jubj~)}(hjh]h*}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\Jubh)}(hj h]hv}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\Jubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjXJubah}(h]h ]h"]h$]h&]jj uh1jhj Jhhhj1JhMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj1JhMGubah}(h]jJah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjJhhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjJhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhj1JhMGubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jJj3jJj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjJubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj Kh]hatomic_long_t *v}(hhhj KhhhNhNubah}(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.hhMGhjKubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$Khj"KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhMGhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMGhjKubah}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjDKh]h Description}(hhhjFKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBKubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjJubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjZKhhhNhNubjv)}(h**v**h]hv}(hhhjcKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZKubh != 0), atomically updates }(h != 0), atomically updates hjZKhhhNhNubjv)}(h**v**h]hv}(hhhjvKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZKubh to (}(h to (hjZKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZKubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjZKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZKubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjZKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjJubj6)}(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.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjJubj6)}(h **Return**h]jv)}(hjKh]hReturn}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjJubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh if }(h if hjKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh was updated, }(h was updated, hjKhhhNhNubjv)}(h **false**h]hfalse}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh otherwise.}(h otherwise.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_inc_unless_negative (C function)!c.atomic_long_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjALhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Lhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZubj9)}(h h]h }(hhhjOLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=LhhhjNLhMZubh)}(hatomic_long_inc_unless_negativeh]h)}(hatomic_long_inc_unless_negativeh]hatomic_long_inc_unless_negative}(hhhjaLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Lubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=LhhhjNLhMZubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Lubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jj)}j]jcLsb!c.atomic_long_inc_unless_negativeasbuh1hhjyLubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyLubj~)}(hjh]h*}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyLubh)}(hj h]hv}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjuLubah}(h]h ]h"]h$]h&]jj uh1jhj=LhhhjNLhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9LhhhjNLhMZubah}(h]j4Lah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj6Lhhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjLhhubah}(h]h ]h"]h$]h&]uh1jhj6LhhhjNLhMZubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLj3jLj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhj MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjMubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj&Mh]hatomic_long_t *v}(hhhj(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.hhMZhj Mubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjAMhj?MhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;MhMZhj= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjwMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwMubh >= 0), atomically updates }(h >= 0), atomically updates hjwMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwMubh to (}(h to (hjwMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwMubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjwMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwMubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjwMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjMubj6)}(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.}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjMubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjMubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh if }(h if hjMhhhNhNubjv)}(h**v**h]hv}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh was updated, }(h was updated, hjMhhhNhNubjv)}(h **false**h]hfalse}(hhhj$NhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh otherwise.}(h otherwise.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_dec_unless_positive (C function)!c.atomic_long_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhj^NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmubj9)}(h h]h }(hhhjlNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZNhhhjkNhMmubh)}(hatomic_long_dec_unless_positiveh]h)}(hatomic_long_dec_unless_positiveh]hatomic_long_dec_unless_positive}(hhhj~NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZNhhhjkNhMmubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]jj)}j]jNsb!c.atomic_long_dec_unless_positiveasbuh1hhjNubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubj~)}(hjh]h*}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNubh)}(hj h]hv}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjNubah}(h]h ]h"]h$]h&]jj uh1jhjZNhhhjkNhMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVNhhhjkNhMmubah}(h]jQNah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjSNhhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjNhhubah}(h]h ]h"]h$]h&]uh1jhjSNhhhjkNhMmubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$Oh]h Parameters}(hhhj&OhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"Oubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjOubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjCOh]hatomic_long_t *v}(hhhjEOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhj=Oubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj^Ohj\OhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXOhMmhjYOubah}(h]h ]h"]h$]h&]uh1jhj=Oubeh}(h]h ]h"]h$]h&]uh1jhjXOhMmhj:Oubah}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hj~Oh]h Description}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|Oubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjOubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh <= 0), atomically updates }(h <= 0), atomically updates hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh to (}(h to (hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjOubj6)}(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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjOubj6)}(h **Return**h]jv)}(hjPh]hReturn}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjOubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh if }(h if hjPhhhNhNubjv)}(h**v**h]hv}(hhhj.PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh was updated, }(h was updated, hjPhhhNhNubjv)}(h **false**h]hfalse}(hhhjAPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh otherwise.}(h otherwise.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_dec_if_positive (C function)c.atomic_long_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhj{PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwPhhhjPhMubh)}(hatomic_long_dec_if_positiveh]h)}(hatomic_long_dec_if_positiveh]hatomic_long_dec_if_positive}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwPhhhjPhMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjPmodnameN classnameNjajd)}jg]jj)}j]jPsbc.atomic_long_dec_if_positiveasbuh1hhjPubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj h]hv}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubah}(h]h ]h"]h$]h&]jj uh1jhjwPhhhjPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjsPhhhjPhMubah}(h]jnPah ](jjeh"]h$]h&]juh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpPhhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj"Qhj QhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjpPhhhjPhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8Qj3j8Qj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjBQh]h Parameters}(hhhjDQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@Qubah}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh > 0), atomically updates }(h > 0), atomically updates hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh to (}(h to (hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5Rubh - 1), regardless of whether }(h - 1), regardless of whether hj5RhhhNhNubjv)}(h**v**h]hv}(hhhjQRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5Rubh was updated.}(h was updated.hj5RhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjah]hReturn}(hhhj@ahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjQfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>fhhhjPfhMubh)}(hraw_atomic_fetch_addh]h)}(hraw_atomic_fetch_addh]hraw_atomic_fetch_add}(hhhjcfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_fubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>fhhhjPfhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{fubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{fubh)}(hj\h]hi}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{fubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjwfubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjfmodnameN classnameNjajd)}jg]jj)}j]jefsbc.raw_atomic_fetch_addasbuh1hhjfubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfubj~)}(hjh]h*}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjfubh)}(hj h]hv}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjwfubeh}(h]h ]h"]h$]h&]jj uh1jhj>fhhhjPfhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:fhhhjPfhMubah}(h]j5fah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7fhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjghhubah}(h]h ]h"]h$]h&]uh1jhj7fhhhjPfhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3gj3j3gj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=gh]h Parameters}(hhhj?ghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;gubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hj\gh]hint i}(hhhj^ghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZgubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVgubj)}(hhh]j6)}(hint value to addh]hint value to add}(hjwghjughhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqghMhjrgubah}(h]h ]h"]h$]h&]uh1jhjVgubeh}(h]h ]h"]h$]h&]uh1jhjqghMhjSgubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjgh]h atomic_t *v}(hhhjghhhNhNubah}(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.hhMhjgubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjSgubeh}(h]h ]h"]h$]h&]uh1jhj7gubj6)}(h**Description**h]jv)}(hjgh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjghhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh to (}(h to (hjghhhNhNubjv)}(h**v**h]hv}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh + }(h + hjghhhNhNubjv)}(h**i**h]hi}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh) with full ordering.}(h) with full ordering.hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.}(hj1hhj/hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubj6)}(h **Return**h]jv)}(hj@hh]hReturn}(hhhjBhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>hubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjVhhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVhubh.}(hjPhjVhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7gubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_add_acquire (C function)c.raw_atomic_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhhjhhMubh)}(hraw_atomic_fetch_add_acquireh]h)}(hraw_atomic_fetch_add_acquireh]hraw_atomic_fetch_add_acquire}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhjhhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubh)}(hj\h]hi}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj iubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjimodnameN classnameNjajd)}jg]jj)}j]jhsbc.raw_atomic_fetch_add_acquireasbuh1hhjiubj9)}(h h]h }(hhhj,ihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubj~)}(hjh]h*}(hhhj:ihhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjiubh)}(hj h]hv}(hhhjGihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhhjhhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhjhhMubah}(h]jhah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjsihjqihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjih]h Parameters}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hjih]hint i}(hhhjihhhNhNubah}(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.hhMhjiubj)}(hhh]j6)}(hint value to addh]hint value to add}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjih]h atomic_t *v}(hhhjihhhNhNubah}(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.hhMhjiubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h**Description**h]jv)}(hj&jh]h Description}(hhhj(jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$jubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjqhhhNhNubjv)}(h**v**h]hv}(hhhjGqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>qubh to (}(h to (hj>qhhhNhNubjv)}(h**v**h]hv}(hhhjZqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>qubh - }(h - hj>qhhhNhNubjv)}(h**i**h]hi}(hhhjmqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>qubh) with relaxed ordering.}(h) with relaxed ordering.hj>qhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubj6)}(h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubj6)}(h **Return**h]jv)}(hjqh]hReturn}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubj6)}(hNothing.h]hNothing.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_sub_return (C function)c.raw_atomic_sub_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjqhhhjqhMubh)}(hraw_atomic_sub_returnh]h)}(hraw_atomic_sub_returnh]hraw_atomic_sub_return}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjqhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(h h]h }(hhhj(rhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubh)}(hj\h]hi}(hhhj6rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjQrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNrubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjSrmodnameN classnameNjajd)}jg]jj)}j]jrsbc.raw_atomic_sub_returnasbuh1hhjJrubj9)}(h h]h }(hhhjqrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJrubj~)}(hjh]h*}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJrubh)}(hj h]hv}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJrubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubeh}(h]h ]h"]h$]h&]jj uh1jhjqhhhjqhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjqhMubah}(h]jqah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjqhhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjqhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jrj3jrj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hm/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 to subtract h](j)}(h ``int i``h]j<)}(hjrh]hint i}(hhhjrhhhNhNubah}(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.hhMhjrubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj shMhj subah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj shMhjrubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj0sh]h atomic_t *v}(hhhj2shhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj.subah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*subj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjKshjIshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEshMhjFsubah}(h]h ]h"]h$]h&]uh1jhj*subeh}(h]h ]h"]h$]h&]uh1jhjEshMhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubj6)}(h**Description**h]jv)}(hjksh]h Description}(hhhjmshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjisubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjshhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh to (}(h to (hjshhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh - }(h - hjshhhNhNubjv)}(h**i**h]hi}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh) with full ordering.}(h) with full ordering.hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj6)}(hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj6)}(h **Return**h]jv)}(hjsh]hReturn}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjshhhNhNubjv)}(h**v**h]hv}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh.}(hjPhjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_sub_return_acquire (C function)c.raw_atomic_sub_return_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h6int raw_atomic_sub_return_acquire (int i, atomic_t *v)h]h)}(h5int raw_atomic_sub_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hhhj3thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/thhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!ubj9)}(h h]h }(hhhjBthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/thhhjAthM!ubh)}(hraw_atomic_sub_return_acquireh]h)}(hraw_atomic_sub_return_acquireh]hraw_atomic_sub_return_acquire}(hhhjTthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPtubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/thhhjAthM!ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjpthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjltubj9)}(h h]h }(hhhj~thhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjltubh)}(hj\h]hi}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjltubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhtubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjtmodnameN classnameNjajd)}jg]jj)}j]jVtsbc.raw_atomic_sub_return_acquireasbuh1hhjtubj9)}(h h]h }(hhhjthhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubj~)}(hjh]h*}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjtubh)}(hj h]hv}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhtubeh}(h]h ]h"]h$]h&]jj uh1jhj/thhhjAthM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+thhhjAthM!ubah}(h]j&tah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj(thhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjuhj uhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj uhhubah}(h]h ]h"]h$]h&]uh1jhj(thhhjAthM!ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$uj3j$uj4uh1hhhhjIhNhNubjl)}(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_sub_return_acquire() elsewhere. **Return** The updated value of **v**.h](j6)}(h**Parameters**h]jv)}(hj.uh]h Parameters}(hhhj0uhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,uubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj(uubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hjMuh]hint i}(hhhjOuhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKuubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjGuubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjhuhjfuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbuhM!hjcuubah}(h]h ]h"]h$]h&]uh1jhjGuubeh}(h]h ]h"]h$]h&]uh1jhjbuhM!hjDuubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjuh]h atomic_t *v}(hhhjuhhhNhNubah}(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"hjuubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhM"hjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM"hjDuubeh}(h]h ]h"]h$]h&]uh1jhj(uubj6)}(h**Description**h]jv)}(hjuh]h Description}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj(uubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjuhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh to (}(h to (hjuhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh - }(h - hjuhhhNhNubjv)}(h**i**h]hi}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh) with acquire ordering.}(h) with acquire ordering.hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj(uubj6)}(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.}(hj"vhj vhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hj(uubj6)}(h **Return**h]jv)}(hj1vh]hReturn}(hhhj3vhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/vubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hj(uubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjGvhhhNhNubjv)}(h**v**h]hv}(hhhjPvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGvubh.}(hjPhjGvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hj(uubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_sub_return_release (C function)c.raw_atomic_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<ubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvhhhjvhM<ubh)}(hraw_atomic_sub_return_releaseh]h)}(hraw_atomic_sub_return_releaseh]hraw_atomic_sub_return_release}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjvhM<ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubh)}(hj\h]hi}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjvmodnameN classnameNjajd)}jg]jj)}j]jvsbc.raw_atomic_sub_return_releaseasbuh1hhjvubj9)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubj~)}(hjh]h*}(hhhj+whhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjvubh)}(hj h]hv}(hhhj8whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjvubeh}(h]h ]h"]h$]h&]jj uh1jhjvhhhjvhM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjvhM<ubah}(h]j|vah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhj~vhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjdwhjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hj_whhubah}(h]h ]h"]h$]h&]uh1jhj~vhhhjvhM<ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzwj3jzwj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj~wubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hjwh]hint i}(hhhjwhhhNhNubah}(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.hhM<hjwubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhM<hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM<hjwubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjwh]h atomic_t *v}(hhhjwhhhNhNubah}(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.hhM=hjwubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhM=hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM=hjwubeh}(h]h ]h"]h$]h&]uh1jhj~wubj6)}(h**Description**h]jv)}(hjxh]h Description}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj~wubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj-xhhhNhNubjv)}(h**v**h]hv}(hhhj6xhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-xubh to (}(h to (hj-xhhhNhNubjv)}(h**v**h]hv}(hhhjIxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-xubh - }(h - hj-xhhhNhNubjv)}(h**i**h]hi}(hhhj\xhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-xubh) with release ordering.}(h) with release ordering.hj-xhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj~wubj6)}(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.}(hjxxhjvxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj~wubj6)}(h **Return**h]jv)}(hjxh]hReturn}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChj~wubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjxhhhNhNubjv)}(h**v**h]hv}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh.}(hjPhjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChj~wubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_sub_return_relaxed (C function)c.raw_atomic_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxhhhjxhMVubh)}(hraw_atomic_sub_return_relaxedh]h)}(hraw_atomic_sub_return_relaxedh]hraw_atomic_sub_return_relaxed}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjxhMVubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(h h]h }(hhhj*yhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubh)}(hj\h]hi}(hhhj8yhhhNhNubah}(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}(hhhjSyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPyubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUymodnameN classnameNjajd)}jg]jj)}j]jysbc.raw_atomic_sub_return_relaxedasbuh1hhjLyubj9)}(h h]h }(hhhjsyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLyubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLyubh)}(hj h]hv}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjyubeh}(h]h ]h"]h$]h&]jj uh1jhjxhhhjxhMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjxhMVubah}(h]jxah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjxhhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjyhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMVubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjyubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hjyh]hint i}(hhhjyhhhNhNubah}(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.hhMVhjyubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMVhjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjzhMVhjyubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj2zh]h atomic_t *v}(hhhj4zhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0zubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhj,zubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjMzhjKzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGzhMWhjHzubah}(h]h ]h"]h$]h&]uh1jhj,zubeh}(h]h ]h"]h$]h&]uh1jhjGzhMWhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjmzh]h Description}(hhhjozhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkzubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjyubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjzhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh to (}(h to (hjzhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh - }(h - hjzhhhNhNubjv)}(h**i**h]hi}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh) with relaxed ordering.}(h) with relaxed ordering.hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjyubj6)}(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.}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjyubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjyubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjzhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubh.}(hjPhjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_sub (C function)c.raw_atomic_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj5{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1{hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmubj9)}(h h]h }(hhhjD{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1{hhhjC{hMmubh)}(hraw_atomic_fetch_subh]h)}(hraw_atomic_fetch_subh]hraw_atomic_fetch_sub}(hhhjV{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1{hhhjC{hMmubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjr{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn{ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjn{ubh)}(hj\h]hi}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjj{ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{modnameN classnameNjajd)}jg]jj)}j]jX{sbc.raw_atomic_fetch_subasbuh1hhj{ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubj~)}(hjh]h*}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubh)}(hj h]hv}(hhhj{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{hMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-{hhhjC{hMmubah}(h]j({ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhj*{hhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhj |hhubah}(h]h ]h"]h$]h&]uh1jhj*{hhhjC{hMmubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j&|j3j&|j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0|h]h Parameters}(hhhj2|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.|ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj*|ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j<)}(hjO|h]hint i}(hhhjQ|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjM|ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjI|ubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjj|hjh|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjd|hMmhje|ubah}(h]h ]h"]h$]h&]uh1jhjI|ubeh}(h]h ]h"]h$]h&]uh1jhjd|hMmhjF|ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj|h]h atomic_t *v}(hhhj|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.hhMnhj|ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMnhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMnhjF|ubeh}(h]h ]h"]h$]h&]uh1jhj*|ubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj*|ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj|hhhNhNubjv)}(h**v**h]hv}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh to (}(h to (hj|hhhNhNubjv)}(h**v**h]hv}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh - }(h - hj|hhhNhNubjv)}(h**i**h]hi}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh) with full ordering.}(h) with full ordering.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj*|ubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.}(hj$}hj"}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhj*|ubj6)}(h **Return**h]jv)}(hj3}h]hReturn}(hhhj5}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1}ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj*|ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjI}hhhNhNubjv)}(h**v**h]hv}(hhhjR}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI}ubh.}(hjPhjI}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj*|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_acquire (C function)c.raw_atomic_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}hhhj}hMubh)}(hraw_atomic_fetch_sub_acquireh]h)}(hraw_atomic_fetch_sub_acquireh]hraw_atomic_fetch_sub_acquire}(hhhj}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}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hj\h]hi}(hhhj}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}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]jj)}j]j}sbc.raw_atomic_fetch_sub_acquireasbuh1hhj}ubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubj~)}(hjh]h*}(hhhj-~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}ubh)}(hj h]hv}(hhhj:~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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjf~hjd~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhja~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j|~j3j|~j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj~h]hint i}(hhhj~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]j6)}(hint value to subtracth]hint value to subtract}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~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}(hhhj~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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj/hhhNhNubjv)}(h**v**h]hv}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh to (}(h to (hj/hhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh - }(h - hj/hhhNhNubjv)}(h**i**h]hi}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh) with acquire ordering.}(h) with acquire ordering.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj6)}(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.}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_release (C function)c.raw_atomic_fetch_sub_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_sub_releaseh]h)}(hraw_atomic_fetch_sub_releaseh]hraw_atomic_fetch_sub_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj: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}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_sub_releaseasbuh1hhjNubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNubh)}(hj h]hv}(hhhjhhhNhNubah}(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]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jҀj3jҀj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj܀h]h Parameters}(hhhjހhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjڀubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(hint value to subtracth]hint value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj4h]h atomic_t *v}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubeh}(h]h ]h"]h$]h&]uh1jhjրubj6)}(h**Description**h]jv)}(hjoh]h Description}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjրubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjրubj6)}(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Ёhj΁hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjրubj6)}(h **Return**h]jv)}(hj߁h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj݁ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjրubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjրubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_relaxed (C function)c.raw_atomic_fetch_sub_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3hhhjEhMubh)}(hraw_atomic_fetch_sub_relaxedh]h)}(hraw_atomic_fetch_sub_relaxedh]hraw_atomic_fetch_sub_relaxed}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjEhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjpubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jZsbc.raw_atomic_fetch_sub_relaxedasbuh1hhjubj9)}(h h]h }(hhhj˂hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjقhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjEhMubah}(h]j*ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j(j3j(j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjQh]hint i}(hhhjShhhNhNubah}(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.hhMhjKubj)}(hhh]j6)}(hint value to subtracth]hint value to subtract}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubj6)}(h**Description**h]jv)}(hjŃh]h Description}(hhhjǃhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjÃubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjۃhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjۃubh to (}(h to (hjۃhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjۃubh - }(h - hjۃhhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjۃubh) with relaxed ordering.}(h) with relaxed ordering.hjۃhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj6)}(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&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjKhhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh.}(hjPhjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_inc (C function)c.raw_atomic_inchNtauh1hhjIhhhNhNubh)}(hhh](h)}(h!void raw_atomic_inc (atomic_t *v)h]h)}(h void raw_atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_inch]h)}(hraw_atomic_inch]hraw_atomic_inc}(hhhjhhhNhNubah}(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}(hhhj̈́hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʄubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjτmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_incasbuh1hhjƄubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjƄubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjƄubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jJj3jJj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjTh]h Parameters}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjuhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjąhhhNhNubjv)}(h**v**h]hv}(hhhjͅhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjąubh to (}(h to (hjąhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjąubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjąhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj6)}(h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj6)}(hNothing.h]hNothing.}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_inc_return (C function)c.raw_atomic_inc_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLhhhj^hMubh)}(hraw_atomic_inc_returnh]h)}(hraw_atomic_inc_returnh]hraw_atomic_inc_return}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jssbc.raw_atomic_inc_returnasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjˆhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj6h]h atomic_t *v}(hhhj8hhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with full ordering.}(h + 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj·h]hReturn}(hhhjЇhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj̇ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_acquire (C function)c.raw_atomic_inc_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"hhhj4hMubh)}(hraw_atomic_inc_return_acquireh]h)}(hraw_atomic_inc_return_acquireh]hraw_atomic_inc_return_acquire}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jj)}j]jIsbc.raw_atomic_inc_return_acquireasbuh1hhj_ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj͈hjˈhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȈhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjGh]h Description}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hj]hhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh to (}(h to (hj]hhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjÉhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_release (C function)c.raw_atomic_inc_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMubh)}(hraw_atomic_inc_return_releaseh]h)}(hraw_atomic_inc_return_releaseh]hraw_atomic_inc_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_inc_return_releaseasbuh1hhj5ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjÊh]h Parameters}(hhhjŊhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj܊ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjيubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hj3hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh to (}(h to (hj3hhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh + 1) with release ordering.}(h + 1) with release ordering.hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_relaxed (C function)c.raw_atomic_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjҋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj΋hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj΋hhhjhM5ubh)}(hraw_atomic_inc_return_relaxedh]h)}(hraw_atomic_inc_return_relaxedh]hraw_atomic_inc_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj΋hhhjhM5ubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_inc_return_relaxedasbuh1hhj ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj΋hhhjhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjʋhhhjhM5ubah}(h]jŋah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjNjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjthhubah}(h]h ]h"]h$]h&]uh1jhjNjhhhjhM5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhM5hjubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjӌhjьhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj͌hM5hjΌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj͌hM5hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubj6)}(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.}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9hjubj6)}(h **Return**h]jv)}(hjPh]hReturn}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjfhhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh.}(hjPhjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_inc (C function)c.raw_atomic_fetch_inchNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMKubh)}(hraw_atomic_fetch_inch]h)}(hraw_atomic_fetch_inch]hraw_atomic_fetch_inc}(hhhjɍhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjōubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMKubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jˍsbc.raw_atomic_fetch_incasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjݍubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMKubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjoh]h Parameters}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjiubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h**Description**h]jv)}(hjɎh]h Description}(hhhjˎhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjǎubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjiubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjߎhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߎubh to (}(h to (hjߎhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߎubh + 1) with full ordering.}(h + 1) with full ordering.hjߎhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjiubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjiubj6)}(h **Return**h]jv)}(hj&h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjiubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj<hhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh.}(hjPhj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_acquire (C function)c.raw_atomic_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMeubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzhhhjhMeubh)}(hraw_atomic_fetch_inc_acquireh]h)}(hraw_atomic_fetch_inc_acquireh]hraw_atomic_fetch_inc_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjhMeubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_inc_acquireasbuh1hhjubj9)}(h h]h }(hhhjޏhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjzhhhjhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjhMeubah}(h]jqah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjshhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj hhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjdh]h atomic_t *v}(hhhjfhhhNhNubah}(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.hhMehj^ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhMehjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMehj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghj?ubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjѐhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghj?ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihj?ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhj?ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_release (C function)c.raw_atomic_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPhhhjbhMubh)}(hraw_atomic_fetch_inc_releaseh]h)}(hraw_atomic_fetch_inc_releaseh]hraw_atomic_fetch_inc_release}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjbhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jwsbc.raw_atomic_fetch_inc_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj‘hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjϑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjbhMubah}(h]jGah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj<hhhNhNubah}(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.hhMhj4ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjuh]h Description}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with release ordering.}(h + 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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ÒhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjҒh]hReturn}(hhhjԒhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjВubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_relaxed (C function)c.raw_atomic_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&hhhj8hMubh)}(hraw_atomic_fetch_inc_relaxedh]h)}(hraw_atomic_fetch_inc_relaxedh]hraw_atomic_fetch_inc_relaxed}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj8hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjlmodnameN classnameNjajd)}jg]jj)}j]jMsbc.raw_atomic_fetch_inc_relaxedasbuh1hhjcubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj_ubah}(h]h ]h"]h$]h&]jj uh1jhj&hhhj8hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj8hMubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjѓhjϓhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj̓hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjKh]h Description}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjahhhNhNubjv)}(h**v**h]hv}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubh to (}(h to (hjahhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjǔhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_dec (C function)c.raw_atomic_dechNtauh1hhjIhhhNhNubh)}(hhh](h)}(h!void raw_atomic_dec (atomic_t *v)h]h)}(h void raw_atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_dech]h)}(hraw_atomic_dech]hraw_atomic_dec}(hhhj!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}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jj)}j]j#sbc.raw_atomic_decasbuh1hhj9ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9ubh)}(hj h]hv}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj5ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjǕh]h Parameters}(hhhjɕhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjŕubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjݕubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj!h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj7hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh to (}(h to (hj7hhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj~h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_dec_return (C function)c.raw_atomic_dec_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjÖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjҖhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjіhMubh)}(hraw_atomic_dec_returnh]h)}(hraw_atomic_dec_returnh]hraw_atomic_dec_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjіhMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_dec_returnasbuh1hhjubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj>hhhNhNubah}(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]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjіhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjėhj—hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjAh]hReturn}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjWhhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh.}(hjPhjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_acquire (C function)c.raw_atomic_dec_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_dec_return_acquireh]h)}(hraw_atomic_dec_return_acquireh]hraw_atomic_dec_return_acquire}(hhhjhhhNhNubah}(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}(hhhj٘hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֘ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjۘmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_dec_return_acquireasbuh1hhjҘubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjҘubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjҘubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jVj3jVj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj`h]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhMhjyubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjЙhhhNhNubjv)}(h**v**h]hv}(hhhjٙhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjЙubh to (}(h to (hjЙhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjЙubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjЙhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj-hhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh.}(hjPhj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_release (C function)c.raw_atomic_dec_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkhhhj}hMubh)}(hraw_atomic_dec_return_releaseh]h)}(hraw_atomic_dec_return_releaseh]hraw_atomic_dec_return_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_dec_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjϚhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjݚhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdhhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j,j3j,j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj6h]h Parameters}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjWhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj›hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with release ordering.}(h - 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj6)}(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ޛhjܛhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_relaxed (C function)c.raw_atomic_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAhhhjShMubh)}(hraw_atomic_dec_return_relaxedh]h)}(hraw_atomic_dec_return_relaxedh]hraw_atomic_dec_return_relaxed}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjShMubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jhsbc.raw_atomic_dec_return_relaxedasbuh1hhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubah}(h]h ]h"]h$]h&]jj uh1jhjAhhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhjShMubah}(h]j8ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:hhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjShMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj-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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj|hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh to (}(h to (hj|hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjÝh]hReturn}(hhhjŝhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjٝhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjٝubh.}(hjPhjٝhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_dec (C function)c.raw_atomic_fetch_dechNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%ubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj)hM%ubh)}(hraw_atomic_fetch_dech]h)}(hraw_atomic_fetch_dech]hraw_atomic_fetch_dec}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(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}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]jj)}j]j>sbc.raw_atomic_fetch_decasbuh1hhjTubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjTubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj)hM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hM%ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjhhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjžhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j؞j3j؞j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjܞubj6)}(h**Description**h]jv)}(hj<h]h Description}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjܞubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjRhhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh to (}(h to (hjRhhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh - 1) with full ordering.}(h - 1) with full ordering.hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjܞubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjܞubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjܞubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjܞubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_acquire (C function)c.raw_atomic_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM?ubh)}(hraw_atomic_fetch_dec_acquireh]h)}(hraw_atomic_fetch_dec_acquireh]hraw_atomic_fetch_dec_acquire}(hhhjhhhNhNubah}(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}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj3modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_dec_acquireasbuh1hhj*ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubj~)}(hjh]h*}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubh)}(hj h]hv}(hhhjlhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhjhhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj٠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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjѠubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjΠubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hj(hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh to (}(h to (hj(hhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj6)}(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.}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjubj6)}(h **Return**h]jv)}(hjoh]hReturn}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_release (C function)c.raw_atomic_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjǡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjáhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYubj9)}(h h]h }(hhhj֡hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjáhhhjաhMYubh)}(hraw_atomic_fetch_dec_releaseh]h)}(hraw_atomic_fetch_dec_releaseh]hraw_atomic_fetch_dec_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjáhhhjաhMYubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_dec_releaseasbuh1hhjubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjáhhhjաhMYubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjաhMYubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahjhhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjաhMYubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjȢhjƢhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj¢hMYhjâubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj¢hMYhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with release ordering.}(h - 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubj6)}(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.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjubj6)}(h **Return**h]jv)}(hjEh]hReturn}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj[hhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh.}(hjPhj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_relaxed (C function)c.raw_atomic_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMrubh)}(hraw_atomic_fetch_dec_relaxedh]h)}(hraw_atomic_fetch_dec_relaxedh]hraw_atomic_fetch_dec_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMrubj)}(h (atomic_t *v)h]j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjݣhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڣubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjߣmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_dec_relaxedasbuh1hhj֣ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj֣ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj֣ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֣ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjңubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMrubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMrubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhj^ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhMrhj}ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj^ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjԤhhhNhNubjv)}(h**v**h]hv}(hhhjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjԤubh to (}(h to (hjԤhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjԤubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjԤhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj^ubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhj^ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhj^ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj1hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh.}(hjPhj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_and (C function)c.raw_atomic_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjohhhjhMubh)}(hraw_atomic_andh]h)}(hraw_atomic_andh]hraw_atomic_and}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj̥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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_andasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jdj3jdj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjȦ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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjߦhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjۦhMhjܦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۦhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(h;Safe to use in noinstr code; prefer atomic_and() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_and() elsewhere.}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(h **Return**h]jv)}(hjqh]hReturn}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_and (C function)c.raw_atomic_fetch_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjŧhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjħhMubh)}(hraw_atomic_fetch_andh]h)}(hraw_atomic_fetch_andh]hraw_atomic_fetch_and}(hhhjקhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj,modnameN classnameNjajd)}jg]jj)}j]j٧sbc.raw_atomic_fetch_andasbuh1hhj#ubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj~)}(hjh]h*}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#ubh)}(hj h]hv}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjҨ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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʨubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǨubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj h]h atomic_t *v}(hhhj 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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǨubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjDh]h Description}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjZhhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubh to (}(h to (hjZhhhNhNubjv)}(h**v**h]hv}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubh & }(h & hjZhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubh) with full ordering.}(h) with full ordering.hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjʩhhhNhNubjv)}(h**v**h]hv}(hhhjөhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʩubh.}(hjPhjʩhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_acquire (C function)c.raw_atomic_fetch_and_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_and_acquireh]h)}(hraw_atomic_fetch_and_acquireh]hraw_atomic_fetch_and_acquire}(hhhj-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}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubh)}(hj\h]hi}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j/sbc.raw_atomic_fetch_and_acquireasbuh1hhjyubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjyubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj(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]j6)}(h int valueh]h int value}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;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}(hhhjahhhNhNubah}(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.hhMhjYubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj̫hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhj߫hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_release (C function)c.raw_atomic_fetch_and_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^hhhjphMubh)}(hraw_atomic_fetch_and_releaseh]h)}(hraw_atomic_fetch_and_releaseh]hraw_atomic_fetch_and_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhjphMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj֬hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӬubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjجmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_and_releaseasbuh1hhjϬubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjϬubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjϬubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϬubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjphMubah}(h]jUah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWhhubj)}(hhh]j6)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jSj3jSj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj]h]h Parameters}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hj|h]hint i}(hhhj~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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjЭhjέhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjʭhMhj˭ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʭhMhjsubeh}(h]h ]h"]h$]h&]uh1jhjWubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj6)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**i**h]hi}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj6)}(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.}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjvhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh.}(hjPhjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_relaxed (C function)c.raw_atomic_fetch_and_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjǮhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjƮhMubh)}(hraw_atomic_fetch_and_relaxedh]h)}(hraw_atomic_fetch_and_relaxedh]hraw_atomic_fetch_and_relaxed}(hhhjٮhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj.modnameN classnameNjajd)}jg]jj)}j]jۮsbc.raw_atomic_fetch_and_relaxedasbuh1hhj%ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%ubj~)}(hjh]h*}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj%ubh)}(hj h]hv}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjԯ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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̯ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɯubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj h]h atomic_t *v}(hhhj 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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjɯubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjFh]h Description}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj\hhhNhNubjv)}(h**v**h]hv}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh to (}(h to (hj\hhhNhNubjv)}(h**v**h]hv}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh & }(h & hj\hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh) with relaxed ordering.}(h) with relaxed ordering.hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj̰hhhNhNubjv)}(h**v**h]hv}(hhhjհhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj̰ubh.}(hjPhj̰hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_andnot (C function)c.raw_atomic_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhjhMubh)}(hraw_atomic_andnoth]h)}(hraw_atomic_andnoth]hraw_atomic_andnot}(hhhj/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}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubh)}(hj\h]hi}(hhhjghhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j1sbc.raw_atomic_andnotasbuh1hhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj*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]j6)}(h int valueh]h int value}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=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<)}(hjah]h atomic_t *v}(hhhjchhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjβhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**~i**h]h~i}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.h]h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hNothing.h]hNothing.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_fetch_andnot (C function)c.raw_atomic_fetch_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMhhhj_hMubh)}(hraw_atomic_fetch_andnoth]h)}(hraw_atomic_fetch_andnoth]hraw_atomic_fetch_andnot}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhj_hMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjųhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj³ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdzmodnameN classnameNjajd)}jg]jj)}j]jtsbc.raw_atomic_fetch_andnotasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjMhhhj_hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj_hMubah}(h]jDah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFhhubj)}(hhh]j6)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj'hhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjmhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubj6)}(h**Description**h]jv)}(hjߴh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݴubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj6)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**~i**h]h~i}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj6)}(hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj6)}(h **Return**h]jv)}(hjOh]hReturn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjehhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh.}(hjPhjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_acquire (C function)!c.raw_atomic_fetch_andnot_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM0ubh)}(hraw_atomic_fetch_andnot_acquireh]h)}(hraw_atomic_fetch_andnot_acquireh]hraw_atomic_fetch_andnot_acquire}(hhhjȵhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĵubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM0ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjܵubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jʵsb!c.raw_atomic_fetch_andnot_acquireasbuh1hhjubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjܵubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM0ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9hjhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjö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.hhM0hjubj)}(hhh]j6)}(h int valueh]h int value}(hjܶhjڶhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjֶhM0hj׶ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjֶhM0hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjKhhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh to (}(h to (hjKhhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh & }(h & hjKhhhNhNubjv)}(h**~i**h]h~i}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh) with acquire ordering.}(h) with acquire ordering.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjķhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_release (C function)!c.raw_atomic_fetch_andnot_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hMKubh)}(hraw_atomic_fetch_andnot_releaseh]h)}(hraw_atomic_fetch_andnot_releaseh]hraw_atomic_fetch_andnot_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMKubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hj\h]hi}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjsmodnameN classnameNjajd)}jg]jj)}j]j sb!c.raw_atomic_fetch_andnot_releaseasbuh1hhjjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMKubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjظhjָhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjӸhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjPh]h atomic_t *v}(hhhjRhhhNhNubah}(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.hhMLhjJubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehMLhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMLhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**~i**h]h~i}(hhhjйhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_relaxed (C function)!c.raw_atomic_fetch_andnot_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMeubj9)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjOhhhjahMeubh)}(hraw_atomic_fetch_andnot_relaxedh]h)}(hraw_atomic_fetch_andnot_relaxedh]hraw_atomic_fetch_andnot_relaxed}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjahMeubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjǺhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĺubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjɺmodnameN classnameNjajd)}jg]jj)}j]jvsb!c.raw_atomic_fetch_andnot_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhjahMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjahMeubah}(h]jFah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjHhhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj)hhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jDj3jDj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjNh]h Parameters}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjHubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjmh]hint i}(hhhjohhhNhNubah}(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.hhMehjgubj)}(hhh]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMehjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMehjdubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj߻ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjHubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h**~i**h]h~i}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjHubj6)}(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.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjHubj6)}(h **Return**h]jv)}(hjQh]hReturn}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjHubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjghhhNhNubjv)}(h**v**h]hv}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh.}(hjPhjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_or (C function)c.raw_atomic_orhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM|ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM|ubh)}(h raw_atomic_orh]h)}(h raw_atomic_orh]h raw_atomic_or}(hhhjʼhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƼubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM|ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj޼ubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j̼sbc.raw_atomic_orasbuh1hhjubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjXhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjŽ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]j6)}(h int valueh]h int value}(hj޽hjܽhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjؽhM|hjٽubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؽhM|hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjMhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh to (}(h to (hjMhhhNhNubjv)}(h**v**h]hv}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh | }(h | hjMhhhNhNubjv)}(h**i**h]hi}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh) with relaxed ordering.}(h) with relaxed ordering.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h:Safe to use in noinstr code; prefer atomic_or() elsewhere.h]h:Safe to use in noinstr code; prefer atomic_or() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_fetch_or (C function)c.raw_atomic_fetch_orhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_orh]h)}(hraw_atomic_fetch_orh]hraw_atomic_fetch_or}(hhhj 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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%ubh)}(hj\h]hi}(hhhjEhhhNhNubah}(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}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjbmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_orasbuh1hhjYubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjǿhjſhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jݿj3jݿj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjAhhhNhNubah}(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.hhMhj9ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjzh]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh | }(h | hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_acquire (C function)c.raw_atomic_fetch_or_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>hhhjPhMubh)}(hraw_atomic_fetch_or_acquireh]h)}(hraw_atomic_fetch_or_acquireh]hraw_atomic_fetch_or_acquire}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhjPhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjwubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jesbc.raw_atomic_fetch_or_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjwubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7hhubj)}(hhh]j6)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hj\h]hint i}(hhhj^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]j6)}(h int valueh]h int value}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj6)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh | }(h | hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj6)}(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.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj6)}(h **Return**h]jv)}(hj@h]hReturn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjVhhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh.}(hjPhjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_release (C function)c.raw_atomic_fetch_or_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_or_releaseh]h)}(hraw_atomic_fetch_or_releaseh]hraw_atomic_fetch_or_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_or_releaseasbuh1hhjubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjGhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj&h]h Description}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj<hhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh to (}(h to (hj<hhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh | }(h | hj<hhhNhNubjv)}(h**i**h]hi}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh) with release ordering.}(h) with release ordering.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_relaxed (C function)c.raw_atomic_fetch_or_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_or_relaxedh]h)}(hraw_atomic_fetch_or_relaxedh]hraw_atomic_fetch_or_relaxed}(hhhjhhhNhNubah}(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}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'ubh)}(hj\h]hi}(hhhjGhhhNhNubah}(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}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_or_relaxedasbuh1hhj[ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[ubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj 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]j6)}(h int valueh]h int value}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hjAh]h atomic_t *v}(hhhjChhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh | }(h | hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_xor (C function)c.raw_atomic_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@hhhjRhMubh)}(hraw_atomic_xorh]h)}(hraw_atomic_xorh]hraw_atomic_xor}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhjRhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjyubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jgsbc.raw_atomic_xorasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9hhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj?h]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hj^h]hint i}(hhhj`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]j6)}(h int valueh]h int value}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh ^ }(h ^ hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubj6)}(h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubj6)}(h **Return**h]jv)}(hjBh]hReturn}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubj6)}(hNothing.h]hNothing.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_xor (C function)c.raw_atomic_fetch_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_fetch_xorh]h)}(hraw_atomic_fetch_xorh]hraw_atomic_fetch_xor}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_xorasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj6hhhNhNubah}(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]jzah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|hhubj)}(hhh]j6)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jxj3jxj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj6)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj+hhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh to (}(h to (hj+hhhNhNubjv)}(h**v**h]hv}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh ^ }(h ^ hj+hhhNhNubjv)}(h**i**h]hi}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh) with full ordering.}(h) with full ordering.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj6)}(hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj|ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj|ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_acquire (C function)c.raw_atomic_fetch_xor_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hraw_atomic_fetch_xor_acquireh]h)}(hraw_atomic_fetch_xor_acquireh]hraw_atomic_fetch_xor_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj6hhhNhNubah}(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}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjSmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_xor_acquireasbuh1hhjJubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjhhubj)}(hhh]j6)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj0h]h atomic_t *v}(hhhj2hhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhM!hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM!hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjkh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh ^ }(h ^ hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_release (C function)c.raw_atomic_fetch_xor_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/hhhjAhM;ubh)}(hraw_atomic_fetch_xor_releaseh]h)}(hraw_atomic_fetch_xor_releaseh]hraw_atomic_fetch_xor_release}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhjAhM;ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubj$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jVsbc.raw_atomic_fetch_xor_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjhubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhjAhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhjAhM;ubah}(h]j&ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhj(hhubj)}(hhh]j6)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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(hhhjAhM;ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hm/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 h](j)}(h ``int i``h]j<)}(hjMh]hint i}(hhhjOhhhNhNubah}(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.hhM;hjGubj)}(hhh]j6)}(h int valueh]h int value}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhM;hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM;hjDubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj(ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh ^ }(h ^ hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj(ubj6)}(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.}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hj(ubj6)}(h **Return**h]jv)}(hj1h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj(ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjGhhhNhNubjv)}(h**v**h]hv}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh.}(hjPhjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_relaxed (C function)c.raw_atomic_fetch_xor_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMUubh)}(hraw_atomic_fetch_xor_relaxedh]h)}(hraw_atomic_fetch_xor_relaxedh]hraw_atomic_fetch_xor_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMUubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_xor_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMUubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMUubah}(h]j|ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj~hhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThj_hhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMUubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhj~ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j<)}(hjh]hint i}(hhhjhhhNhNubah}(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]j6)}(h int valueh]h int value}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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.hhMVhjubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhj~ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj-hhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh to (}(h to (hj-hhhNhNubjv)}(h**v**h]hv}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh ^ }(h ^ hj-hhhNhNubjv)}(h**i**h]hi}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh) with relaxed ordering.}(h) with relaxed ordering.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhj~ubj6)}(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.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhj~ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hj~ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_xchg (C function)c.raw_atomic_xchghNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMlubh)}(hraw_atomic_xchgh]h)}(hraw_atomic_xchgh]hraw_atomic_xchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMlubj)}(h(atomic_t *v, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_xchgasbuh1hhjubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMlubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjhhubj)}(hhh]j6)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMlubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hj3h]hint new}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj-ubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMmhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMmhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjnh]h Description}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjubj6)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering.}(h with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjubj6)}(hh]h atomic_t *v}(hhhj@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.hhMhj8ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjwh]hint new}(hhhjyhhhNhNubah}(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.hhMhjqubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with acquire ordering.}(h with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hDSafe to use in noinstr code; prefer atomic_xchg_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_acquire() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj%hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh.}(hjPhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_xchg_release (C function)c.raw_atomic_xchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjchhhjuhMubh)}(hraw_atomic_xchg_releaseh]h)}(hraw_atomic_xchg_releaseh]hraw_atomic_xchg_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjuhMubj)}(h(atomic_t *v, int new)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_xchg_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj\hhubj)}(hhh]j6)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jYj3jYj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjch]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubj6)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to }(h to hj hhhNhNubjv)}(h**new**h]hnew}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh with release ordering.}(h with release ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubj6)}(hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubj6)}(h **Return**h]jv)}(hjSh]hReturn}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjihhhNhNubjv)}(h**v**h]hv}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh.}(hjPhjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_xchg_relaxed (C function)c.raw_atomic_xchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_xchg_relaxedh]h)}(hraw_atomic_xchg_relaxedh]hraw_atomic_xchg_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_xchg_relaxedasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubh)}(hnewh]hnew}(hhhjZhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hAtomically updates hjPhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh to }(h to hjPhhhNhNubjv)}(h**new**h]hnew}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh with relaxed ordering.}(h with relaxed ordering.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_cmpxchg (C function)c.raw_atomic_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_cmpxchgh]h)}(hraw_atomic_cmpxchgh]hraw_atomic_cmpxchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(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}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_cmpxchgasbuh1hhj(ubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubj~)}(hjh]h*}(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(ubh)}(hj h]hv}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$ubj$)}(hint oldh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$ubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjAhhhNhNubah}(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.hhMhj9ubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hjxh]hint old}(hhhjzhhhNhNubah}(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.hhMhjrubj)}(hhh]j6)}(hint value to compare withh]hint value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.h]h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_acquire (C function)c.raw_atomic_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_cmpxchg_acquireh]h)}(hraw_atomic_cmpxchg_acquireh]hraw_atomic_cmpxchg_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_cmpxchg_acquireasbuh1hhjubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint oldh](j)}(hinth]hint}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj,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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hjch]hint old}(hhhjehhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjmh]hReturn}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_release (C function)c.raw_atomic_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hraw_atomic_cmpxchg_releaseh]h)}(hraw_atomic_cmpxchg_releaseh]hraw_atomic_cmpxchg_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_cmpxchg_releaseasbuh1hhjubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint oldh](j)}(hinth]hint}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjTubh)}(holdh]hold}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hM hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM hj ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hjNh]hint old}(hhhjPhhhNhNubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjXh]hReturn}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjnhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh.}(hjPhjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_relaxed (C function)c.raw_atomic_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM)ubh)}(hraw_atomic_cmpxchg_relaxedh]h)}(hraw_atomic_cmpxchg_relaxedh]hraw_atomic_cmpxchg_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_cmpxchg_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint oldh](j)}(hinth]hint}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubh)}(holdh]hold}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint newh](j)}(hinth]hint}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j<)}(hj9h]hint old}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(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]j6)}(hint value to compare withh]hint value to compare with}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhM*hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM*hjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjrh]hint new}(hhhjthhhNhNubah}(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+hjlubj)}(hhh]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubj6)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0hjubj6)}(h **Return**h]jv)}(hjCh]hReturn}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjYhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh.}(hjPhjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic_try_cmpxchg (C function)c.raw_atomic_try_cmpxchghNtauh1hhjIhhhNhNubh)}(hhh](h)}(hhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMdhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMdhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hj\h]hint *old}(hhhj^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.hhMehjVubj)}(hhh]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMehjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMehjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj6)}(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.}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_try_cmpxchg_release (C function) c.raw_atomic_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_try_cmpxchg_releaseh]h)}(hraw_atomic_try_cmpxchg_releaseh]hraw_atomic_try_cmpxchg_release}(hhhjhhhNhNubah}(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}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj4modnameN classnameNjajd)}jg]jj)}j]jsb c.raw_atomic_try_cmpxchg_releaseasbuh1hhj+ubj9)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubj~)}(hjh]h*}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj+ubh)}(hj h]hv}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj'ubj$)}(hint *oldh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj'ubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j&j3j&j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj0h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjOh]h atomic_t *v}(hhhjQhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjh]hint *old}(hhhjhhhNhNubah}(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]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_try_cmpxchg_relaxed (C function) c.raw_atomic_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj,hMubh)}(hraw_atomic_try_cmpxchg_relaxedh]h)}(hraw_atomic_try_cmpxchg_relaxedh]hraw_atomic_try_cmpxchg_relaxed}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(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}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`modnameN classnameNjajd)}jg]jj)}j]jAsb c.raw_atomic_try_cmpxchg_relaxedasbuh1hhjWubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjWubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubj$)}(hint *oldh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubj$)}(hint newh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jRj3jRj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hj{h]h atomic_t *v}(hhhj}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.hhMhjuubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j<)}(hjh]hint *old}(hhhjhhhNhNubah}(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]j6)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j<)}(hjh]hint new}(hhhjhhhNhNubah}(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]j6)}(hint value to assignh]hint value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubj6)}(h**Description**h]jv)}(hj(h]h Description}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj6)}(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 (}(hIf (hj>hhhNhNubjv)}(h**v**h]hv}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh == }(h == hj>hhhNhNubjv)}(h**old**h]hold}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh), atomically updates }(h), atomically updates hj>hhhNhNubjv)}(h**v**h]hv}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh to }(h to hj>hhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hj>hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh is not modified, }(h is not modified, hj>hhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh$ is updated to the current value of }(h$ is updated to the current value of hj>hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_sub_and_test (C function)c.raw_atomic_sub_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGhhhjXhMubh)}(hraw_atomic_sub_and_testh]h)}(hraw_atomic_sub_and_testh]hraw_atomic_sub_and_test}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjXhMubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jmsbc.raw_atomic_sub_and_testasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjXhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjXhMubah}(h]j>ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@hhubj)}(hhh]j6)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j;j3j;j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjdh]hint i}(hhhjfhhhNhNubah}(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]j6)}(hint value to subtracth]hint value to subtract}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubj6)}(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.}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubj6)}(h **Return**h]jv)}(hjHh]hReturn}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh if the resulting value of }(h if the resulting value of hj^hhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh is zero, }(h is zero, hj^hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh otherwise.}(h otherwise.hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_dec_and_test (C function)c.raw_atomic_dec_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_dec_and_testh]h)}(hraw_atomic_dec_and_testh]hraw_atomic_dec_and_test}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_dec_and_testasbuh1hhjubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj<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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj?h]hReturn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh if the resulting value of }(h if the resulting value of hjUhhhNhNubjv)}(h**v**h]hv}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh is zero, }(h is zero, hjUhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh otherwise.}(h otherwise.hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_inc_and_test (C function)c.raw_atomic_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_inc_and_testh]h)}(hraw_atomic_inc_and_testh]hraw_atomic_inc_and_test}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_inc_and_testasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj3hhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjh]h atomic_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with full ordering.}(h + 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj6)}(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'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj6)}(h **Return**h]jv)}(hj6h]hReturn}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh if the resulting value of }(h if the resulting value of hjLhhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh is zero, }(h is zero, hjLhhhNhNubjv)}(h **false**h]hfalse}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh otherwise.}(h otherwise.hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_add_negative (C function)c.raw_atomic_add_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hraw_atomic_add_negativeh]h)}(hraw_atomic_add_negativeh]hraw_atomic_add_negative}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj%modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_add_negativeasbuh1hhjubj9)}(h h]h }(hhhjChhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj^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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj=h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjShhhNhNubjv)}(h**v**h]hv}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh to (}(h to (hjShhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh + }(h + hjShhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh) with full ordering.}(h) with full ordering.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_acquire (C function)!c.raw_atomic_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj'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 ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj4hM ubh)}(hraw_atomic_add_negative_acquireh]h)}(hraw_atomic_add_negative_acquireh]hraw_atomic_add_negative_acquire}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj4hM ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jIsb!c.raw_atomic_add_negative_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj[ubeh}(h]h ]h"]h$]h&]jj uh1jhj#hhhj4hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM& hjhhubj)}(hhh]j6)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj@h]hint i}(hhhjBhhhNhNubah}(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]j6)}(hint value to addh]hint value to add}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hj7ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjyh]h atomic_t *v}(hhhj{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.hhM hjsubj)}(hhh]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjubj6)}(h **Return**h]jv)}(hj$h]hReturn}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh if the resulting value of }(h if the resulting value of hj:hhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh is negative, }(h is negative, hj:hhhNhNubjv)}(h **false**h]hfalse}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh otherwise.}(h otherwise.hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_release (C function)!c.raw_atomic_add_negative_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM8 ubh)}(hraw_atomic_add_negative_releaseh]h)}(hraw_atomic_add_negative_releaseh]hraw_atomic_add_negative_release}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM8 ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb!c.raw_atomic_add_negative_releaseasbuh1hhj ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(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]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMA hjhhubj)}(hhh]j6)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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.hhHM8 hjubj)}(hhh]j6)}(hint value to addh]hint value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM8 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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjAhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh to (}(h to (hjAhhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh + }(h + hjAhhhNhNubjv)}(h**i**h]hi}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh) with release ordering.}(h) with release ordering.hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM= hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNube(h)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_relaxed (C function)!c.raw_atomic_add_negative_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj"hMR ubh)}(hraw_atomic_add_negative_relaxedh]h)}(hraw_atomic_add_negative_relaxedh]hraw_atomic_add_negative_relaxed}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hMR ubj)}(h(int i, atomic_t *v)h](j$)}(hint ih](j)}(hinth]hint}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubh)}(hj\h]hi}(hhhjmhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j7sb!c.raw_atomic_add_negative_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjIubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj"hMR ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hMR ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hj hhubj)}(hhh]j6)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMR ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j<)}(hj.h]hint i}(hhhj0hhhNhNubah}(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 hj(ubj)}(hhh]j6)}(hint value to addh]hint value to add}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjChMR hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMR hj%ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j<)}(hjgh]h atomic_t *v}(hhhjihhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMS hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMS hj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hj ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh if the resulting value of }(h if the resulting value of hj(hhhNhNubjv)}(h**v**h]hv}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh is negative, }(h is negative, hj(hhhNhNubjv)}(h **false**h]hfalse}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh otherwise.}(h otherwise.hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_add_unless (C function)c.raw_atomic_fetch_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMi ubh)}(hraw_atomic_fetch_add_unlessh]h)}(hraw_atomic_fetch_add_unlessh]hraw_atomic_fetch_add_unless}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMi ubj)}(h(atomic_t *v, int a, int u)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint ah](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint uh](j)}(hinth]hint}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjOubh)}(hjQh]hu}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMi ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMi 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}(hhhjhhhNhNubah}(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 hj ubj)}(hhh]j6)}(hint value to addh]hint value to add}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMj hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMj hjubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j<)}(hjLh]hint u}(hhhjNhhhNhNubah}(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.hhMk hjFubj)}(hhh]j6)}(hint value to compare withh]hint value to compare with}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMk hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMk hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjubj6)}(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.}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjubj6)}(h **Return**h]jv)}(hj0h]hReturn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjFhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh.}(hjPhjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_add_unless (C function)c.raw_atomic_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hraw_atomic_add_unlessh]h)}(hraw_atomic_add_unlessh]hraw_atomic_add_unless}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h(atomic_t *v, int a, int u)h](j$)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint ah](j)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj( hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj&h]ha}(hhhj6 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hint uh](j)}(hinth]hint}(hhhjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ ubj9)}(h h]h }(hhhj\ hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJ ubh)}(hjQh]hu}(hhhjj 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 juh1hjjhjhhhjhM ubah}(h]j{ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj}hhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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}hhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj h]h atomic_t *v}(hhhj 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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j<)}(hj h]hint a}(hhhj 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]j6)}(hint value to addh]hint value to add}(hj) hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj# hM hj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hM hj ubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j<)}(hjG h]hint u}(hhhjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjE ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjA ubj)}(hhh]j6)}(hint value to compare withh]hint value to compare with}(hjb hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\ 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 ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh != }(h != hj hhhNhNubjv)}(h**u**h]hu}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh), atomically updates }(h), atomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + }(h + hj hhhNhNubjv)}(h**a**h]ha}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj6)}(hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj6)}(h **Return**h]jv)}(hj+ h]hReturn}(hhhj- hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj) ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjE hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjA ubh if }(h if hjA hhhNhNubjv)}(h**v**h]hv}(hhhjX hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjA ubh was updated, }(h was updated, hjA hhhNhNubjv)}(h **false**h]hfalse}(hhhjk hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjA ubh otherwise.}(h otherwise.hjA hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_inc_not_zero (C function)c.raw_atomic_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhj 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 ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hM ubh)}(hraw_atomic_inc_not_zeroh]h)}(hraw_atomic_inc_not_zeroh]hraw_atomic_inc_not_zero}(hhhj 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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sbc.raw_atomic_inc_not_zeroasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj 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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjK hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjF hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2ja j3ja j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjk h]h Parameters}(hhhjm hhhNhNubah}(h]h ]h"]h$]h&]uh1juhji ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje 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}(hhhj 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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhje ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje ubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh != 0), atomically updates }(h != 0), atomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje ubj6)}(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.}(hj9 hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje ubj6)}(h **Return**h]jv)}(hjH h]hReturn}(hhhjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje ubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjb hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ ubh if }(h if hj^ hhhNhNubjv)}(h**v**h]hv}(hhhju hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ ubh was updated, }(h was updated, hj^ hhhNhNubjv)}(h **false**h]hfalse}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ ubh otherwise.}(h otherwise.hj^ hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hje ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_inc_unless_negative (C function) c.raw_atomic_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhj 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 ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj hM ubh)}(hraw_atomic_inc_unless_negativeh]h)}(hraw_atomic_inc_unless_negativeh]hraw_atomic_inc_unless_negative}(hhhj 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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j sb c.raw_atomic_inc_unless_negativeasbuh1hhj ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj<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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjchhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh >= 0), atomically updates }(h >= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(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.}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjeh]hReturn}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh if }(h if hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh was updated, }(h was updated, hj{hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh otherwise.}(h otherwise.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_dec_unless_positive (C function) c.raw_atomic_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hraw_atomic_dec_unless_positiveh]h)}(hraw_atomic_dec_unless_positiveh]hraw_atomic_dec_unless_positive}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsb c.raw_atomic_dec_unless_positiveasbuh1hhjubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjYhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh <= 0), atomically updates }(h <= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(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.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_dec_if_positive (C function)c.raw_atomic_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hM ubh)}(hraw_atomic_dec_if_positiveh]h)}(hraw_atomic_dec_if_positiveh]hraw_atomic_dec_if_positive}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(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}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_dec_if_positiveasbuh1hhj5ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_th]hpointer to atomic_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj3hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh > 0), atomically updates }(h > 0), atomically updates hj3hhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh to (}(h to (hj3hhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hj3hhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hThe old value of (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1), regardless of whether }(h - 1), regardless of whether hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated.}(h was updated.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_read (C function)c.raw_atomic64_readhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_readsbc.raw_atomic64_readasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj0hM ubh)}(hraw_atomic64_readh]h)}(hj-h]hraw_atomic64_read}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj0hM ubj)}(h(const atomic64_t *v)h]j$)}(hconst atomic64_t *vh](j')}(hjn'h]hconst}(hhhj^hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjZubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]j+c.raw_atomic64_readasbuh1hhjZubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjZubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj0hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj0hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj h]hconst atomic64_t *v}(hhhj"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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj[h]h Description}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hAtomically loads the value of hjqhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubh with relaxed ordering.}(h with relaxed ordering.hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_read_acquire (C function)c.raw_atomic64_read_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj!hM ubh)}(hraw_atomic64_read_acquireh]h)}(hjh]hraw_atomic64_read_acquire}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hM ubj)}(h(const atomic64_t *v)h]j$)}(hconst atomic64_t *vh](j')}(hjn'h]hconst}(hhhjOhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjKubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]jc.raw_atomic64_read_acquireasbuh1hhjKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjKubh)}(hj h]hv}(hhhjhhhNhNubah}(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 juh1hjjhjhhhj!hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjhhubj)}(hhh]j6)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjLh]h Description}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hAtomically loads the value of hjbhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh with acquire ordering.}(h with acquire ordering.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_set (C function)c.raw_atomic64_sethNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM9 ubh)}(hraw_atomic64_seth]h)}(hraw_atomic64_seth]hraw_atomic64_set}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM9 ubj)}(h(atomic64_t *v, s64 i)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic64_setasbuh1hhj'ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'ubj~)}(hjh]h*}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj'ubh)}(hj h]hv}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj#ubj$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jJc.raw_atomic64_setasbuh1hhj}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}ubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj#ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM9 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM9 ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB hjhhubj)}(hhh]j6)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM9 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hM9 hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM9 hjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j<)}(hjTh]hs64 i}(hhhjVhhhNhNubah}(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: hjNubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihM: hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM: hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubj6)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with relaxed ordering.}(h with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubj6)}(h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM> hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@ hjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic64_set_release (C function)c.raw_atomic64_set_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ ubj9)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-hhhj?hMJ ubh)}(hraw_atomic64_set_releaseh]h)}(hraw_atomic64_set_releaseh]hraw_atomic64_set_release}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj?hMJ ubj)}(h(atomic64_t *v, s64 i)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjsmodnameN classnameNjajd)}jg]jj)}j]jTsbc.raw_atomic64_set_releaseasbuh1hhjjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjfubj$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_set_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjfubeh}(h]h ]h"]h$]h&]jj uh1jhj-hhhj?hMJ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj?hMJ ubah}(h]j$ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj&hhubj)}(hhh]j6)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hMJ ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj?h]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hj9ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj^h]h atomic64_t *v}(hhhj`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.hhMJ hjXubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMJ hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMJ hjUubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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.hhMK hjubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMK hjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hj9ubj6)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hj9ubj6)}(hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO hj9ubj6)}(h **Return**h]jv)}(hj/h]hReturn}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hj9ubj6)}(hNothing.h]hNothing.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_add (C function)c.raw_atomic64_addhNtauh1hhjIhhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMd ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjphhhjhMd ubh)}(hraw_atomic64_addh]h)}(hraw_atomic64_addh]hraw_atomic64_add}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhMd ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic64_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjhMd ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhMd ubah}(h]jgah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjihhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hj]hhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMd ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jxj3jxj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjh]hs64 i}(hhhjhhhNhNubah}(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.hhMd hjubj)}(hhh]j6)}(hs64 value to addh]hs64 value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMd hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMd hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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.hhMe hjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMe hjubeh}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hj|ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj+hhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh to (}(h to (hj+hhhNhNubjv)}(h**v**h]hv}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh + }(h + hj+hhhNhNubjv)}(h**i**h]hi}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh) with relaxed ordering.}(h) with relaxed ordering.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hj|ubj6)}(h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hj|ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hj|ubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_add_return (C function)c.raw_atomic64_add_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_add_returnsbc.raw_atomic64_add_returnasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMu ubh)}(hraw_atomic64_add_returnh]h)}(hjh]hraw_atomic64_add_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMu ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jc.raw_atomic64_add_returnasbuh1hhjubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjKhhhNhNubah}(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}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjhmodnameN classnameNjajd)}jg]jc.raw_atomic64_add_returnasbuh1hhj_ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMu ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMu ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~ hjhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMu ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hj h]hs64 i}(hhhj 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]j6)}(hs64 value to addh]hs64 value to add}(hj% hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMu hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMu hj ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjC h]h atomic64_t *v}(hhhjE 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.hhMv hj= ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj^ hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX hMv hjY ubah}(h]h ]h"]h$]h&]uh1jhj= ubeh}(h]h ]h"]h$]h&]uh1jhjX hMv hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj~ h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj| ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + }(h + hj hhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with full ordering.}(h) with full ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjubj6)}(hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMz hjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM| hjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj!hhhNhNubjv)}(h**v**h]hv}(hhhj !hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubh.}(hjPhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM| hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_acquire (C function)!c.raw_atomic64_add_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjI!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjK!modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_add_return_acquiresb!c.raw_atomic64_add_return_acquireasbuh1hhjB!hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjk!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjB!hhhjj!hM ubh)}(hraw_atomic64_add_return_acquireh]h)}(hjg!h]hraw_atomic64_add_return_acquire}(hhhj}!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjB!hhhjj!hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]je!!c.raw_atomic64_add_return_acquireasbuh1hhj!ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubh)}(hj\h]hi}(hhhj!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}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]je!!c.raw_atomic64_add_return_acquireasbuh1hhj!ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hj h]hv}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj!ubeh}(h]h ]h"]h$]h&]jj uh1jhjB!hhhjj!hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>!hhhjj!hM ubah}(h]j9!ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;!hhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjG"hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB"hhubah}(h]h ]h"]h$]h&]uh1jhj;!hhhjj!hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j]"j3j]"j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjg"h]h Parameters}(hhhji"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje"ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hj"h]hs64 i}(hhhj"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]j6)}(hs64 value to addh]hs64 value to add}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"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}(hhhj"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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM hj}"ubeh}(h]h ]h"]h$]h&]uh1jhja"ubj6)}(h**Description**h]jv)}(hj"h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj#hhhNhNubjv)}(h**v**h]hv}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh to (}(h to (hj#hhhNhNubjv)}(h**v**h]hv}(hhhj,#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh + }(h + hj#hhhNhNubjv)}(h**i**h]hi}(hhhj?#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh) with acquire ordering.}(h) with acquire ordering.hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubj6)}(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.}(hj[#hjY#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubj6)}(h **Return**h]jv)}(hjj#h]hReturn}(hhhjl#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjh#ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj#hhhNhNubjv)}(h**v**h]hv}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh.}(hjPhj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_release (C function)!c.raw_atomic64_add_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj#hM ubh)}(hraw_atomic64_add_return_releaseh]h)}(hj#h]hraw_atomic64_add_return_release}(hhhj#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}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj$modnameN classnameNjajd)}jg]j#!c.raw_atomic64_add_return_releaseasbuh1hhj$ubj9)}(h h]h }(hhhj5$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$ubh)}(hj\h]hi}(hhhjC$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}(hhhj^$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`$modnameN classnameNjajd)}jg]j#!c.raw_atomic64_add_return_releaseasbuh1hhjW$ubj9)}(h h]h }(hhhj|$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW$ubj~)}(hjh]h*}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjW$ubh)}(hj h]hv}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW$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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj#hhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj%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]j6)}(hs64 value to addh]hs64 value to add}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%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}(hhhj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9%ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5%ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjV%hjT%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjP%hM hjQ%ubah}(h]h ]h"]h$]h&]uh1jhj5%ubeh}(h]h ]h"]h$]h&]uh1jhjP%hM hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj6)}(h**Description**h]jv)}(hjv%h]h Description}(hhhjx%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt%ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj%hhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh to (}(h to (hj%hhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh + }(h + hj%hhhNhNubjv)}(h**i**h]hi}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh) with release ordering.}(h) with release ordering.hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj6)}(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.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj6)}(h **Return**h]jv)}(hj%h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj%hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh.}(hjPhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_relaxed (C function)!c.raw_atomic64_add_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjA&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjC&modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_add_return_relaxedsb!c.raw_atomic64_add_return_relaxedasbuh1hhj:&hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjc&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:&hhhjb&hM ubh)}(hraw_atomic64_add_return_relaxedh]h)}(hj_&h]hraw_atomic64_add_return_relaxed}(hhhju&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:&hhhjb&hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&modnameN classnameNjajd)}jg]j]&!c.raw_atomic64_add_return_relaxedasbuh1hhj&ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hj\h]hi}(hhhj&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}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&modnameN classnameNjajd)}jg]j]&!c.raw_atomic64_add_return_relaxedasbuh1hhj&ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hj h]hv}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj&ubeh}(h]h ]h"]h$]h&]jj uh1jhj:&hhhjb&hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6&hhhjb&hM ubah}(h]j1&ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3&hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj?'hj='hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:'hhubah}(h]h ]h"]h$]h&]uh1jhj3&hhhjb&hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jU'j3jU'j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_'h]h Parameters}(hhhja'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]'ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hj~'h]hs64 i}(hhhj'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 hjx'ubj)}(hhh]j6)}(hs64 value to addh]hs64 value to add}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM hj'ubah}(h]h ]h"]h$]h&]uh1jhjx'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hju'ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj'h]h atomic64_t *v}(hhhj'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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hju'ubeh}(h]h ]h"]h$]h&]uh1jhjY'ubj6)}(h**Description**h]jv)}(hj'h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj(hhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh to (}(h to (hj(hhhNhNubjv)}(h**v**h]hv}(hhhj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh + }(h + hj(hhhNhNubjv)}(h**i**h]hi}(hhhj7(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh) with relaxed ordering.}(h) with relaxed ordering.hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubj6)}(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.}(hjS(hjQ(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubj6)}(h **Return**h]jv)}(hjb(h]hReturn}(hhhjd(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`(ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjx(hhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjx(ubh.}(hjPhjx(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_add (C function)c.raw_atomic64_fetch_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj(modnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(hhhj(hM ubh)}(hraw_atomic64_fetch_addh]h)}(hj(h]hraw_atomic64_fetch_add}(hhhj(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}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj )ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]j(c.raw_atomic64_fetch_addasbuh1hhj)ubj9)}(h h]h }(hhhj-)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hj\h]hi}(hhhj;)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}(hhhjV)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjX)modnameN classnameNjajd)}jg]j(c.raw_atomic64_fetch_addasbuh1hhjO)ubj9)}(h h]h }(hhhjt)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjO)ubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjO)ubh)}(hj h]hv}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO)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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj(hhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j)j3j)j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj)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]j6)}(hs64 value to addh]hs64 value to add}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*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<)}(hj3*h]h atomic64_t *v}(hhhj5*hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1*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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjN*hjL*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjH*hM hjI*ubah}(h]h ]h"]h$]h&]uh1jhj-*ubeh}(h]h ]h"]h$]h&]uh1jhjH*hM hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h**Description**h]jv)}(hjn*h]h Description}(hhhjp*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl*ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh to (}(h to (hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh + }(h + hj*hhhNhNubjv)}(h**i**h]hi}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh) with full ordering.}(h) with full ordering.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj6)}(hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj6)}(h **Return**h]jv)}(hj*h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh.}(hjPhj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_acquire (C function) c.raw_atomic64_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj9+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj;+modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_add_acquiresb c.raw_atomic64_fetch_add_acquireasbuh1hhj2+hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj[+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2+hhhjZ+hM ubh)}(hraw_atomic64_fetch_add_acquireh]h)}(hjW+h]hraw_atomic64_fetch_add_acquire}(hhhjm+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2+hhhjZ+hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jU+ c.raw_atomic64_fetch_add_acquireasbuh1hhj+ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubh)}(hj\h]hi}(hhhj+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}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jU+ c.raw_atomic64_fetch_add_acquireasbuh1hhj+ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj+ubh)}(hj h]hv}(hhhj ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj+ubeh}(h]h ]h"]h$]h&]jj uh1jhj2+hhhjZ+hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.+hhhjZ+hM ubah}(h]j)+ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj++hhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj7,hj5,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2,hhubah}(h]h ]h"]h$]h&]uh1jhj++hhhjZ+hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jM,j3jM,j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjW,h]h Parameters}(hhhjY,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU,ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjv,h]hs64 i}(hhhjx,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]j6)}(hs64 value to addh]hs64 value to add}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjp,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjm,ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj,h]h atomic64_t *v}(hhhj,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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjm,ubeh}(h]h ]h"]h$]h&]uh1jhjQ,ubj6)}(h**Description**h]jv)}(hj,h]h Description}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj-hhhNhNubjv)}(h**v**h]hv}(hhhj -hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh to (}(h to (hj-hhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh + }(h + hj-hhhNhNubjv)}(h**i**h]hi}(hhhj/-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh) with acquire ordering.}(h) with acquire ordering.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubj6)}(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.}(hjK-hjI-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubj6)}(h **Return**h]jv)}(hjZ-h]hReturn}(hhhj\-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjX-ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjp-hhhNhNubjv)}(h**v**h]hv}(hhhjy-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp-ubh.}(hjPhjp-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_release (C function) c.raw_atomic64_fetch_add_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}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 ubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj-hhhj-hM ubh)}(hraw_atomic64_fetch_add_releaseh]h)}(hj-h]hraw_atomic64_fetch_add_release}(hhhj-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}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj .modnameN classnameNjajd)}jg]j- c.raw_atomic64_fetch_add_releaseasbuh1hhj.ubj9)}(h h]h }(hhhj%.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubh)}(hj\h]hi}(hhhj3.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}(hhhjN.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjP.modnameN classnameNjajd)}jg]j- c.raw_atomic64_fetch_add_releaseasbuh1hhjG.ubj9)}(h h]h }(hhhjl.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjG.ubj~)}(hjh]h*}(hhhjz.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjG.ubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG.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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj-hhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j.j3j.j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj.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]j6)}(hs64 value to addh]hs64 value to add}(hj /hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/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}(hhhj-/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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjF/hjD/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@/hM hjA/ubah}(h]h ]h"]h$]h&]uh1jhj%/ubeh}(h]h ]h"]h$]h&]uh1jhj@/hM hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj6)}(h**Description**h]jv)}(hjf/h]h Description}(hhhjh/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd/ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj|/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|/ubh to (}(h to (hj|/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|/ubh + }(h + hj|/hhhNhNubjv)}(h**i**h]hi}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|/ubh) with release ordering.}(h) with release ordering.hj|/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.ubj6)}(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/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.ubj6)}(h **Return**h]jv)}(hj/h]hReturn}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh.}(hjPhj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_relaxed (C function) c.raw_atomic64_fetch_add_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj10hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj30modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_add_relaxedsb c.raw_atomic64_fetch_add_relaxedasbuh1hhj*0hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, ubj9)}(h h]h }(hhhjS0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*0hhhjR0hM, ubh)}(hraw_atomic64_fetch_add_relaxedh]h)}(hjO0h]hraw_atomic64_fetch_add_relaxed}(hhhje0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*0hhhjR0hM, ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jM0 c.raw_atomic64_fetch_add_relaxedasbuh1hhj|0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|0ubh)}(hj\h]hi}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjx0ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj0modnameN classnameNjajd)}jg]jM0 c.raw_atomic64_fetch_add_relaxedasbuh1hhj0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0ubj~)}(hjh]h*}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0ubh)}(hj h]hv}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjx0ubeh}(h]h ]h"]h$]h&]jj uh1jhj*0hhhjR0hM, ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&0hhhjR0hM, ubah}(h]j!0ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 hj#0hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj/1hj-1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj*1hhubah}(h]h ]h"]h$]h&]uh1jhj#0hhhjR0hM, ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jE1j3jE1j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjO1h]h Parameters}(hhhjQ1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM1ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjI1ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hjn1h]hs64 i}(hhhjp1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjl1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjh1ubj)}(hhh]j6)}(hs64 value to addh]hs64 value to add}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hM, hj1ubah}(h]h ]h"]h$]h&]uh1jhjh1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM, hje1ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj1h]h atomic64_t *v}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj1ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hM- hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM- hje1ubeh}(h]h ]h"]h$]h&]uh1jhjI1ubj6)}(h**Description**h]jv)}(hj1h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjI1ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj1hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh to (}(h to (hj1hhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh + }(h + hj1hhhNhNubjv)}(h**i**h]hi}(hhhj'2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh) with relaxed ordering.}(h) with relaxed ordering.hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjI1ubj6)}(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.}(hjC2hjA2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1 hjI1ubj6)}(h **Return**h]jv)}(hjR2h]hReturn}(hhhjT2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjP2ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3 hjI1ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjh2hhhNhNubjv)}(h**v**h]hv}(hhhjq2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjh2ubh.}(hjPhjh2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3 hjI1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_sub (C function)c.raw_atomic64_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2hhhj2hMC ubh)}(hraw_atomic64_subh]h)}(hraw_atomic64_subh]hraw_atomic64_sub}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhj2hMC ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj2modnameN classnameNjajd)}jg]jj)}j]j2sbc.raw_atomic64_subasbuh1hhj2ubj9)}(h h]h }(hhhj 3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2ubh)}(hj\h]hi}(hhhj3hhhNhNubah}(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}(hhhj33hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj03ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj53modnameN classnameNjajd)}jg]j3c.raw_atomic64_subasbuh1hhj,3ubj9)}(h h]h }(hhhjQ3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,3ubj~)}(hjh]h*}(hhhj_3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,3ubh)}(hj h]hv}(hhhjl3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhj2hhhj2hMC ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhj2hMC ubah}(h]j2ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhML hj2hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB hj3hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj2hMC ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj3ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hj3h]hs64 i}(hhhj3hhhNhNubah}(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.hhMC hj3ubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hMC hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMC hj3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj4h]h atomic64_t *v}(hhhj4hhhNhNubah}(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.hhMD hj 4ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj+4hj)4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%4hMD hj&4ubah}(h]h ]h"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]uh1jhj%4hMD hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hjK4h]h Description}(hhhjM4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI4ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj3ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hja4hhhNhNubjv)}(h**v**h]hv}(hhhjj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja4ubh to (}(h to (hja4hhhNhNubjv)}(h**v**h]hv}(hhhj}4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja4ubh - }(h - hja4hhhNhNubjv)}(h**i**h]hi}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja4ubh) with relaxed ordering.}(h) with relaxed ordering.hja4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj3ubj6)}(h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMH hj3ubj6)}(h **Return**h]jv)}(hj4h]hReturn}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj3ubj6)}(hNothing.h]hNothing.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_sub_return (C function)c.raw_atomic64_sub_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_sub_returnsbc.raw_atomic64_sub_returnasbuh1hhj4hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT ubj9)}(h h]h }(hhhj%5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4hhhj$5hMT ubh)}(hraw_atomic64_sub_returnh]h)}(hj!5h]hraw_atomic64_sub_return}(hhhj75hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj35ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhj$5hMT ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjU5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjW5modnameN classnameNjajd)}jg]j5c.raw_atomic64_sub_returnasbuh1hhjN5ubj9)}(h h]h }(hhhjs5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjN5ubh)}(hj\h]hi}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjN5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJ5ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5modnameN classnameNjajd)}jg]j5c.raw_atomic64_sub_returnasbuh1hhj5ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubj~)}(hjh]h*}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJ5ubeh}(h]h ]h"]h$]h&]jj uh1jhj4hhhj$5hMT ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj$5hMT ubah}(h]j4ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM] hj4hhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj6hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj$5hMT ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j6j3j6j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj!6h]h Parameters}(hhhj#6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj6ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hj@6h]hs64 i}(hhhjB6hhhNhNubah}(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.hhMT hj:6ubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj[6hjY6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjU6hMT hjV6ubah}(h]h ]h"]h$]h&]uh1jhj:6ubeh}(h]h ]h"]h$]h&]uh1jhjU6hMT hj76ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjy6h]h atomic64_t *v}(hhhj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjw6ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjs6ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMU hj6ubah}(h]h ]h"]h$]h&]uh1jhjs6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMU hj76ubeh}(h]h ]h"]h$]h&]uh1jhj6ubj6)}(h**Description**h]jv)}(hj6h]h Description}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj6ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj6hhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh to (}(h to (hj6hhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh - }(h - hj6hhhNhNubjv)}(h**i**h]hi}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh) with full ordering.}(h) with full ordering.hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj6ubj6)}(hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hj6ubj6)}(h **Return**h]jv)}(hj$7h]hReturn}(hhhj&7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"7ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hj6ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj:7hhhNhNubjv)}(h**v**h]hv}(hhhjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:7ubh.}(hjPhj:7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_acquire (C function)!c.raw_atomic64_sub_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_sub_return_acquiresb!c.raw_atomic64_sub_return_acquireasbuh1hhjx7hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjx7hhhj7hMo ubh)}(hraw_atomic64_sub_return_acquireh]h)}(hj7h]hraw_atomic64_sub_return_acquire}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjx7hhhj7hMo ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]j7!c.raw_atomic64_sub_return_acquireasbuh1hhj7ubj9)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubh)}(hj\h]hi}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj7ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj8modnameN classnameNjajd)}jg]j7!c.raw_atomic64_sub_return_acquireasbuh1hhj8ubj9)}(h h]h }(hhhj68hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubj~)}(hjh]h*}(hhhjD8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj8ubh)}(hj h]hv}(hhhjQ8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj7ubeh}(h]h ]h"]h$]h&]jj uh1jhjx7hhhj7hMo ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjt7hhhj7hMo ubah}(h]jo7ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjq7hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj}8hj{8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn hjx8hhubah}(h]h ]h"]h$]h&]uh1jhjq7hhhj7hMo ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj8ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hj8h]hs64 i}(hhhj8hhhNhNubah}(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.hhMo hj8ubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMo hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMo hj8ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj8h]h atomic64_t *v}(hhhj8hhhNhNubah}(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.hhMp hj8ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 9hMp hj 9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj 9hMp hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hj09h]h Description}(hhhj29hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.9ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj8ubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjF9hhhNhNubjv)}(h**v**h]hv}(hhhjO9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF9ubh to (}(h to (hjF9hhhNhNubjv)}(h**v**h]hv}(hhhjb9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF9ubh - }(h - hjF9hhhNhNubjv)}(h**i**h]hi}(hhhju9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF9ubh) with acquire ordering.}(h) with acquire ordering.hjF9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj8ubj6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hj8ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj8ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj9hhhNhNubjv)}(h**v**h]hv}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubh.}(hjPhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_release (C function)!c.raw_atomic64_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj9modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_sub_return_releasesb!c.raw_atomic64_sub_return_releaseasbuh1hhj9hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9hhhj:hM ubh)}(hraw_atomic64_sub_return_releaseh]h)}(hj:h]hraw_atomic64_sub_return_release}(hhhj/:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhj:hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjM:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjO:modnameN classnameNjajd)}jg]j:!c.raw_atomic64_sub_return_releaseasbuh1hhjF:ubj9)}(h h]h }(hhhjk:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjF:ubh)}(hj\h]hi}(hhhjy:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjB:ubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]j:!c.raw_atomic64_sub_return_releaseasbuh1hhj:ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:ubj~)}(hjh]h*}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubh)}(hj h]hv}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjB:ubeh}(h]h ]h"]h$]h&]jj uh1jhj9hhhj:hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj:hM ubah}(h]j9ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj9hhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj:hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj;h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj8;h]hs64 i}(hhhj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2;ubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjS;hjQ;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjM;hM hjN;ubah}(h]h ]h"]h$]h&]uh1jhj2;ubeh}(h]h ]h"]h$]h&]uh1jhjM;hM hj/;ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjq;h]h atomic64_t *v}(hhhjs;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjo;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjk;ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;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;ubj6)}(h**Description**h]jv)}(hj;h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh to (}(h to (hj;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh - }(h - hj;hhhNhNubjv)}(h**i**h]hi}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh) with release ordering.}(h) with release ordering.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj6)}(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.}(hj <hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj6)}(h **Return**h]jv)}(hj<h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj2<hhhNhNubjv)}(h**v**h]hv}(hhhj;<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2<ubh.}(hjPhj2<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_relaxed (C function)!c.raw_atomic64_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjw<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjy<modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_sub_return_relaxedsb!c.raw_atomic64_sub_return_relaxedasbuh1hhjp<hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjp<hhhj<hM ubh)}(hraw_atomic64_sub_return_relaxedh]h)}(hj<h]hraw_atomic64_sub_return_relaxed}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp<hhhj<hM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<modnameN classnameNjajd)}jg]j<!c.raw_atomic64_sub_return_relaxedasbuh1hhj<ubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<ubh)}(hj\h]hi}(hhhj<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}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj =ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=modnameN classnameNjajd)}jg]j<!c.raw_atomic64_sub_return_relaxedasbuh1hhj =ubj9)}(h h]h }(hhhj.=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj =ubj~)}(hjh]h*}(hhhj<=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj =ubh)}(hj h]hv}(hhhjI=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj =ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj<ubeh}(h]h ]h"]h$]h&]jj uh1jhjp<hhhj<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl<hhhj<hM ubah}(h]jg<ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hji<hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hju=hjs=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjp=hhubah}(h]h ]h"]h$]h&]uh1jhji<hhhj<hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j=j3j=j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj=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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=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}(hhhj=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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>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=ubj6)}(h**Description**h]jv)}(hj(>h]h Description}(hhhj*>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&>ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj>>hhhNhNubjv)}(h**v**h]hv}(hhhjG>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh to (}(h to (hj>>hhhNhNubjv)}(h**v**h]hv}(hhhjZ>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh - }(h - hj>>hhhNhNubjv)}(h**i**h]hi}(hhhjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>>ubh) with relaxed ordering.}(h) with relaxed ordering.hj>>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj6)}(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.}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj6)}(h **Return**h]jv)}(hj>h]hReturn}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj>hhhNhNubjv)}(h**v**h]hv}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh.}(hjPhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_sub (C function)c.raw_atomic64_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_subsbc.raw_atomic64_fetch_subasbuh1hhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>hhhj?hM ubh)}(hraw_atomic64_fetch_subh]h)}(hj?h]hraw_atomic64_fetch_sub}(hhhj'?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}(hhhjE?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjG?modnameN classnameNjajd)}jg]j?c.raw_atomic64_fetch_subasbuh1hhj>?ubj9)}(h h]h }(hhhjc?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>?ubh)}(hj\h]hi}(hhhjq?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}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]j?c.raw_atomic64_fetch_subasbuh1hhj?ubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj?ubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj?ubh)}(hj h]hv}(hhhj?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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj>hhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j@j3j@j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj0@h]hs64 i}(hhhj2@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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjK@hjI@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjE@hM hjF@ubah}(h]h ]h"]h$]h&]uh1jhj*@ubeh}(h]h ]h"]h$]h&]uh1jhjE@hM hj'@ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hji@h]h atomic64_t *v}(hhhjk@hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjg@ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjc@ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhjc@ubeh}(h]h ]h"]h$]h&]uh1jhj~@hM hj'@ubeh}(h]h ]h"]h$]h&]uh1jhj @ubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj @ubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh to (}(h to (hj@hhhNhNubjv)}(h**v**h]hv}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh - }(h - hj@hhhNhNubjv)}(h**i**h]hi}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubh) with full ordering.}(h) with full ordering.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj @ubj6)}(hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj @ubj6)}(h **Return**h]jv)}(hjAh]hReturn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj @ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj*AhhhNhNubjv)}(h**v**h]hv}(hhhj3AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*Aubh.}(hjPhj*AhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj @ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_acquire (C function) c.raw_atomic64_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjoAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqAmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_sub_acquiresb c.raw_atomic64_fetch_sub_acquireasbuh1hhjhAhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhAhhhjAhM ubh)}(hraw_atomic64_fetch_sub_acquireh]h)}(hjAh]hraw_atomic64_fetch_sub_acquire}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhAhhhjAhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jA c.raw_atomic64_fetch_sub_acquireasbuh1hhjAubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjAubh)}(hj\h]hi}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah"}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj BmodnameN classnameNjajd)}jg]jA c.raw_atomic64_fetch_sub_acquireasbuh1hhjBubj9)}(h h]h }(hhhj&BhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBubj~)}(hjh]h*}(hhhj4BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjBubh)}(hj h]hv}(hhhjABhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjhAhhhjAhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdAhhhjAhM ubah}(h]j_Aah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaAhhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjmBhjkBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhBhhubah}(h]h ]h"]h$]h&]uh1jhjaAhhhjAhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jBj3jBj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjBh]hs64 i}(hhhjBhhhNhNubah}(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 hjBubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjBh]h atomic64_t *v}(hhhjBhhhNhNubah}(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 hjBubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjChjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj6)}(h**Description**h]jv)}(hj Ch]h Description}(hhhj"ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj6ChhhNhNubjv)}(h**v**h]hv}(hhhj?ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Cubh to (}(h to (hj6ChhhNhNubjv)}(h**v**h]hv}(hhhjRChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Cubh - }(h - hj6ChhhNhNubjv)}(h**i**h]hi}(hhhjeChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Cubh) with acquire ordering.}(h) with acquire ordering.hj6ChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj6)}(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.}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj6)}(h **Return**h]jv)}(hjCh]hReturn}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjChhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh.}(hjPhjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_release (C function) c.raw_atomic64_fetch_sub_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjCmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_sub_releasesb c.raw_atomic64_fetch_sub_releaseasbuh1hhjChhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj DhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjChhhj DhM ubh)}(hraw_atomic64_fetch_sub_releaseh]h)}(hj Dh]hraw_atomic64_fetch_sub_release}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhj DhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj=DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:Dubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?DmodnameN classnameNjajd)}jg]jD c.raw_atomic64_fetch_sub_releaseasbuh1hhj6Dubj9)}(h h]h }(hhhj[DhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6Dubh)}(hj\h]hi}(hhhjiDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2Dubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjDmodnameN classnameNjajd)}jg]jD c.raw_atomic64_fetch_sub_releaseasbuh1hhj}Dubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}Dubj~)}(hjh]h*}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}Dubh)}(hj h]hv}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj2Dubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhj DhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhj DhM ubah}(h]jCah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjChhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj DhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jDj3jDj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj Eh]h Parameters}(hhhj EhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hj(Eh]hs64 i}(hhhj*EhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj&Eubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"Eubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjCEhjAEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=EhM hj>Eubah}(h]h ]h"]h$]h&]uh1jhj"Eubeh}(h]h ]h"]h$]h&]uh1jhj=EhM hjEubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjaEh]h atomic64_t *v}(hhhjcEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj_Eubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj[Eubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|EhjzEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvEhM hjwEubah}(h]h ]h"]h$]h&]uh1jhj[Eubeh}(h]h ]h"]h$]h&]uh1jhjvEhM hjEubeh}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hjEh]h Description}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjEhhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh to (}(h to (hjEhhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh - }(h - hjEhhhNhNubjv)}(h**i**h]hi}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh) with release ordering.}(h) with release ordering.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubj6)}(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.}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubj6)}(h **Return**h]jv)}(hj Fh]hReturn}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Fubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj"FhhhNhNubjv)}(h**v**h]hv}(hhhj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"Fubh.}(hjPhj"FhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_relaxed (C function) c.raw_atomic64_fetch_sub_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjgFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjiFmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_sub_relaxedsb c.raw_atomic64_fetch_sub_relaxedasbuh1hhj`Fhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`FhhhjFhM ubh)}(hraw_atomic64_fetch_sub_relaxedh]h)}(hjFh]hraw_atomic64_fetch_sub_relaxed}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`FhhhjFhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjFmodnameN classnameNjajd)}jg]jF c.raw_atomic64_fetch_sub_relaxedasbuh1hhjFubj9)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubh)}(hj\h]hi}(hhhjFhhhNhNubah}(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}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjGmodnameN classnameNjajd)}jg]jF c.raw_atomic64_fetch_sub_relaxedasbuh1hhjFubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubj~)}(hjh]h*}(hhhj,GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFubh)}(hj h]hv}(hhhj9GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjFubeh}(h]h ]h"]h$]h&]jj uh1jhj`FhhhjFhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\FhhhjFhM ubah}(h]jWFah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjYFhhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjeGhjcGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj`Ghhubah}(h]h ]h"]h$]h&]uh1jhjYFhhhjFhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j{Gj3j{Gj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjGh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j<)}(hjGh]hs64 i}(hhhjGhhhNhNubah}(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 hjGubj)}(hhh]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjGubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjGh]h atomic64_t *v}(hhhjGhhhNhNubah}(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 hjGubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjGubeh}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hjHh]h Description}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj.HhhhNhNubjv)}(h**v**h]hv}(hhhj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.Hubh to (}(h to (hj.HhhhNhNubjv)}(h**v**h]hv}(hhhjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.Hubh - }(h - hj.HhhhNhNubjv)}(h**i**h]hi}(hhhj]HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.Hubh) with relaxed ordering.}(h) with relaxed ordering.hj.HhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubj6)}(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.}(hjyHhjwHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubj6)}(h **Return**h]jv)}(hjHh]hReturn}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjHhhhNhNubjv)}(h**v**h]hv}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubh.}(hjPhjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_inc (C function)c.raw_atomic64_inchNtauh1hhjIhhhNhNubh)}(hhh](h)}(h%void raw_atomic64_inc (atomic64_t *v)h]h)}(h$void raw_atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhjHhM" ubh)}(hraw_atomic64_inch]h)}(hraw_atomic64_inch]hraw_atomic64_inc}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjHhM" ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj"ImodnameN classnameNjajd)}jg]jj)}j]jIsbc.raw_atomic64_incasbuh1hhjIubj9)}(h h]h }(hhhj@IhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj~)}(hjh]h*}(hhhjNIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubh)}(hj h]hv}(hhhj[IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjIubah}(h]h ]h"]h$]h&]jj uh1jhjHhhhjHhM" ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjHhM" ubah}(h]jHah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM* hjHhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhM" ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhjIhNhNubjl)}(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_inc() elsewhere. **Return** Nothing.h](j6)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM% hjIubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjIh]h atomic64_t *v}(hhhjIhhhNhNubah}(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" hjIubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhM" hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM" hjIubah}(h]h ]h"]h$]h&]uh1jhjIubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjIubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjJhhhNhNubjv)}(h**v**h]hv}(hhhj JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh to (}(h to (hjJhhhNhNubjv)}(h**v**h]hv}(hhhj3JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjIubj6)}(h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.}(hjOJhjMJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM& hjIubj6)}(h **Return**h]jv)}(hj^Jh]hReturn}(hhhj`JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\Jubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM( hjIubj6)}(hNothing.h]hNothing.}(hjvJhjtJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM( hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_inc_return (C function)c.raw_atomic64_inc_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjJmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_inc_returnsbc.raw_atomic64_inc_returnasbuh1hhjJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6 ubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJhhhjJhM6 ubh)}(hraw_atomic64_inc_returnh]h)}(hjJh]hraw_atomic64_inc_return}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjJhM6 ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjJmodnameN classnameNjajd)}jg]jJc.raw_atomic64_inc_returnasbuh1hhjJubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJubj~)}(hjh]h*}(hhhj$KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubh)}(hj h]hv}(hhhj1KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjJubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhjJhM6 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjJhM6 ubah}(h]jJah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM> hjJhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj]Khj[KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 hjXKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhM6 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jsKj3jsKj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj}Kh]h Parameters}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{Kubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjwKubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjKh]h atomic64_t *v}(hhhjKhhhNhNubah}(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.hhM6 hjKubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhM6 hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM6 hjKubah}(h]h ]h"]h$]h&]uh1jhjwKubj6)}(h**Description**h]jv)}(hjKh]h Description}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjwKubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjKhhhNhNubjv)}(h**v**h]hv}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh to (}(h to (hjKhhhNhNubjv)}(h**v**h]hv}(hhhj LhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh + 1) with full ordering.}(h + 1) with full ordering.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjwKubj6)}(hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.}(hj%Lhj#LhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjwKubj6)}(h **Return**h]jv)}(hj4Lh]hReturn}(hhhj6LhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2Lubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjwKubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjJLhhhNhNubjv)}(h**v**h]hv}(hhhjSLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJLubh.}(hjPhjJLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjwKubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_inc_return_acquire (C function)!c.raw_atomic64_inc_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_inc_return_acquiresb!c.raw_atomic64_inc_return_acquireasbuh1hhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLhhhjLhMP ubh)}(hraw_atomic64_inc_return_acquireh]h)}(hjLh]hraw_atomic64_inc_return_acquire}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhjLhMP ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLmodnameN classnameNjajd)}jg]jL!c.raw_atomic64_inc_return_acquireasbuh1hhjLubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLubj~)}(hjh]h*}(hhhj MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLubh)}(hj h]hv}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubah}(h]h ]h"]h$]h&]jj uh1jhjLhhhjLhMP ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjLhMP ubah}(h]jLah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hjLhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjFMhjDMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO hjAMhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhMP ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\Mj3j\Mj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfMh]h Parameters}(hhhjhMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdMubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj`Mubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjMh]h atomic64_t *v}(hhhjMhhhNhNubah}(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.hhMP hjMubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMP hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMP hj|Mubah}(h]h ]h"]h$]h&]uh1jhj`Mubj6)}(h**Description**h]jv)}(hjMh]h Description}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hj`Mubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh to (}(h to (hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hj`Mubj6)}(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.}(hjNhj NhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hj`Mubj6)}(h **Return**h]jv)}(hjNh]hReturn}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hj`Mubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj3NhhhNhNubjv)}(h**v**h]hv}(hhhjAtomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh to (}(h to (hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh + 1) with release ordering.}(h + 1) with release ordering.hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hjIOubj6)}(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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn hjIOubj6)}(h **Return**h]jv)}(hjPh]hReturn}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjIOubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjPhhhNhNubjv)}(h**v**h]hv}(hhhj%PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh.}(hjPhjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjIOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_inc_return_relaxed (C function)!c.raw_atomic64_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjaPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^Pubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcPmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_inc_return_relaxedsb!c.raw_atomic64_inc_return_relaxedasbuh1hhjZPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZPhhhjPhM ubh)}(hraw_atomic64_inc_return_relaxedh]h)}(hjPh]hraw_atomic64_inc_return_relaxed}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZPhhhjPhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjPmodnameN classnameNjajd)}jg]j}P!c.raw_atomic64_inc_return_relaxedasbuh1hhjPubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj h]hv}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjPubah}(h]h ]h"]h$]h&]jj uh1jhjZPhhhjPhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVPhhhjPhM ubah}(h]jQPah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSPhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQhhubah}(h]h ]h"]h$]h&]uh1jhjSPhhhjPhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j.Qj3j.Qj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8Qh]h Parameters}(hhhj:QhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Qubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjWQh]h atomic64_t *v}(hhhjYQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQQubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrQhjpQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlQhM hjmQubah}(h]h ]h"]h$]h&]uh1jhjQQubeh}(h]h ]h"]h$]h&]uh1jhjlQhM hjNQubah}(h]h ]h"]h$]h&]uh1jhj2Qubj6)}(h**Description**h]jv)}(hjQh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh to (}(h to (hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubj6)}(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.}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubj6)}(h **Return**h]jv)}(hjQh]hReturn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjRhhhNhNubjv)}(h**v**h]hv}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubh.}(hjPhjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_inc (C function)c.raw_atomic64_fetch_inchNtauh1hhjIhhhNhNubh)}(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}(hhhjJRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjLRmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_incsbc.raw_atomic64_fetch_incasbuh1hhjCRhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjlRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjCRhhhjkRhM ubh)}(hraw_atomic64_fetch_inch]h)}(hjhRh]hraw_atomic64_fetch_inc}(hhhj~RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjCRhhhjkRhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjRmodnameN classnameNjajd)}jg]jfRc.raw_atomic64_fetch_incasbuh1hhjRubj9)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubj~)}(hjh]h*}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRubh)}(hj h]hv}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjRubah}(h]h ]h"]h$]h&]jj uh1jhjCRhhhjkRhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?RhhhjkRhM ubah}(h]j:Rah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:Subj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj[ShjYShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUShM hjVSubah}(h]h ]h"]h$]h&]uh1jhj:Subeh}(h]h ]h"]h$]h&]uh1jhjUShM hj7Subah}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hj{Sh]h Description}(hhhj}ShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjySubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjShhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh to (}(h to (hjShhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh + 1) with full ordering.}(h + 1) with full ordering.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubj6)}(hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubj6)}(h **Return**h]jv)}(hjSh]hReturn}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjShhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh.}(hjPhjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_acquire (C function) c.raw_atomic64_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj3ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0Tubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj5TmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_inc_acquiresb c.raw_atomic64_fetch_inc_acquireasbuh1hhj,Thhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjUThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ThhhjTThM ubh)}(hraw_atomic64_fetch_inc_acquireh]h)}(hjQTh]hraw_atomic64_fetch_inc_acquire}(hhhjgThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,ThhhjTThM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjTmodnameN classnameNjajd)}jg]jOT c.raw_atomic64_fetch_inc_acquireasbuh1hhj~Tubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~Tubj~)}(hjh]h*}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~Tubh)}(hj h]hv}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Tubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzTubah}(h]h ]h"]h$]h&]jj uh1jhj,ThhhjTThM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(ThhhjTThM ubah}(h]j#Tah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj%Thhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjThhubah}(h]h ]h"]h$]h&]uh1jhj%ThhhjTThM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUj3jUj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj Uh]h Parameters}(hhhj UhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hj)Uh]h atomic64_t *v}(hhhj+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.hhM hj#Uubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjDUhjBUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>UhM hj?Uubah}(h]h ]h"]h$]h&]uh1jhj#Uubeh}(h]h ]h"]h$]h&]uh1jhj>UhM hj Uubah}(h]h ]h"]h$]h&]uh1jhjUubj6)}(h**Description**h]jv)}(hjdUh]h Description}(hhhjfUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbUubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjzUhhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzUubh to (}(h to (hjzUhhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzUubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjzUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj6)}(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.}(hjUhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj6)}(h **Return**h]jv)}(hjUh]hReturn}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjUhhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh.}(hjPhjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_release (C function) c.raw_atomic64_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjVmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_inc_releasesb c.raw_atomic64_fetch_inc_releaseasbuh1hhjVhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj>VhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjVhhhj=VhM ubh)}(hraw_atomic64_fetch_inc_releaseh]h)}(hj:Vh]hraw_atomic64_fetch_inc_release}(hhhjPVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLVubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhj=VhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjnVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkVubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjpVmodnameN classnameNjajd)}jg]j8V c.raw_atomic64_fetch_inc_releaseasbuh1hhjgVubj9)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjgVubj~)}(hjh]h*}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgVubh)}(hj h]hv}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgVubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjcVubah}(h]h ]h"]h$]h&]jj uh1jhjVhhhj=VhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhj=VhM ubah}(h]j Vah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhj=VhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jVj3jVj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjWh]h atomic64_t *v}(hhhjWhhhNhNubah}(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.hhM hj Wubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj-Whj+WhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'WhM hj(Wubah}(h]h ]h"]h$]h&]uh1jhj Wubeh}(h]h ]h"]h$]h&]uh1jhj'WhM hj Wubah}(h]h ]h"]h$]h&]uh1jhjVubj6)}(h**Description**h]jv)}(hjMWh]h Description}(hhhjOWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKWubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjcWhhhNhNubjv)}(h**v**h]hv}(hhhjlWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcWubh to (}(h to (hjcWhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcWubh + 1) with release ordering.}(h + 1) with release ordering.hjcWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj6)}(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.}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj6)}(h **Return**h]jv)}(hjWh]hReturn}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjWhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh.}(hjPhjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_relaxed (C function) c.raw_atomic64_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjXmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_inc_relaxedsb c.raw_atomic64_fetch_inc_relaxedasbuh1hhjWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj'XhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWhhhj&XhM ubh)}(hraw_atomic64_fetch_inc_relaxedh]h)}(hj#Xh]hraw_atomic64_fetch_inc_relaxed}(hhhj9XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Xubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhj&XhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjWXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTXubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYXmodnameN classnameNjajd)}jg]j!X c.raw_atomic64_fetch_inc_relaxedasbuh1hhjPXubj9)}(h h]h }(hhhjuXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPXubj~)}(hjh]h*}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPXubh)}(hj h]hv}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPXubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLXubah}(h]h ]h"]h$]h&]jj uh1jhjWhhhj&XhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhj&XhM ubah}(h]jWah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjWhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhj&XhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jXj3jXj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjXh]h atomic64_t *v}(hhhjXhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhM hjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjXubah}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hj6Yh]h Description}(hhhj8YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4Yubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjLYhhhNhNubjv)}(h**v**h]hv}(hhhjUYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLYubh to (}(h to (hjLYhhhNhNubjv)}(h**v**h]hv}(hhhjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLYubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjLYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubj6)}(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.}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubj6)}(h **Return**h]jv)}(hjYh]hReturn}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjYhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh.}(hjPhjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_dec (C function)c.raw_atomic64_dechNtauh1hhjIhhhNhNubh)}(hhh](h)}(h%void raw_atomic64_dec (atomic64_t *v)h]h)}(h$void raw_atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYhhhjYhM ubh)}(hraw_atomic64_dech]h)}(hraw_atomic64_dech]hraw_atomic64_dec}(hhhj ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjYhM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj+ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Zubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-ZmodnameN classnameNjajd)}jg]jj)}j]jZsbc.raw_atomic64_decasbuh1hhj$Zubj9)}(h h]h }(hhhjKZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj$Zubj~)}(hjh]h*}(hhhjYZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$Zubh)}(hj h]hv}(hhhjfZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$Zubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj Zubah}(h]h ]h"]h$]h&]jj uh1jhjYhhhjYhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjYhM ubah}(h]jYah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjYhhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjZh]h atomic64_t *v}(hhhjZhhhNhNubah}(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.hhM hjZubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hj [h]h Description}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj [ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj"[hhhNhNubjv)}(h**v**h]hv}(hhhj+[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"[ubh to (}(h to (hj"[hhhNhNubjv)}(h**v**h]hv}(hhhj>[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"[ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj"[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubj6)}(h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.}(hjZ[hjX[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubj6)}(h **Return**h]jv)}(hji[h]hReturn}(hhhjk[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjg[ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubj6)}(hNothing.h]hNothing.}(hj[hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_dec_return (C function)c.raw_atomic64_dec_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_dec_returnsbc.raw_atomic64_dec_returnasbuh1hhj[hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[hhhj[hM ubh)}(hraw_atomic64_dec_returnh]h)}(hj[h]hraw_atomic64_dec_return}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[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}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj\modnameN classnameNjajd)}jg]j[c.raw_atomic64_dec_returnasbuh1hhj[ubj9)}(h h]h }(hhhj!\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubj~)}(hjh]h*}(hhhj/\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[ubh)}(hj h]hv}(hhhj<\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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj[hhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjh\hjf\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjc\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~\j3j~\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj\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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\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\ubj6)}(h**Description**h]jv)}(hj\h]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hj\hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh to (}(h to (hj\hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh - 1) with full ordering.}(h - 1) with full ordering.hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj6)}(hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.}(hj0]hj.]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj6)}(h **Return**h]jv)}(hj?]h]hReturn}(hhhjA]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=]ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjU]hhhNhNubjv)}(h**v**h]hv}(hhhj^]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU]ubh.}(hjPhjU]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_acquire (C function)!c.raw_atomic64_dec_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_dec_return_acquiresb!c.raw_atomic64_dec_return_acquireasbuh1hhj]hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM* ubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]hhhj]hM* ubh)}(hraw_atomic64_dec_return_acquireh]h)}(hj]h]hraw_atomic64_dec_return_acquire}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]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}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj]modnameN classnameNjajd)}jg]j]!c.raw_atomic64_dec_return_acquireasbuh1hhj]ubj9)}(h h]h }(hhhj ^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]ubj~)}(hjh]h*}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj]ubh)}(hj h]hv}(hhhj%^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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2 hj]hhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjQ^hjO^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) hjL^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj]hM* ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jg^j3jg^j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjq^h]h Parameters}(hhhjs^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjo^ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hjk^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}(hhhj^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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hM* hj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM* hj^ubah}(h]h ]h"]h$]h&]uh1jhjk^ubj6)}(h**Description**h]jv)}(hj^h]h Description}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjk^ubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hj^hhhNhNubjv)}(h**v**h]hv}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh to (}(h to (hj^hhhNhNubjv)}(h**v**h]hv}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjk^ubj6)}(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.}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM. hjk^ubj6)}(h **Return**h]jv)}(hj(_h]hReturn}(hhhj*_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&_ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjk^ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj>_hhhNhNubjv)}(h**v**h]hv}(hhhjG_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>_ubh.}(hjPhj>_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjk^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_release (C function)!c.raw_atomic64_dec_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj_modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_dec_return_releasesb!c.raw_atomic64_dec_return_releaseasbuh1hhj|_hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD ubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|_hhhj_hMD ubh)}(hraw_atomic64_dec_return_releaseh]h)}(hj_h]hraw_atomic64_dec_return_release}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|_hhhj_hMD ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj_modnameN classnameNjajd)}jg]j_!c.raw_atomic64_dec_return_releaseasbuh1hhj_ubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_ubj~)}(hjh]h*}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubh)}(hj h]hv}(hhhj`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_hMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjx_hhhj_hMD ubah}(h]js_ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhML hju_hhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj:`hj8`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hj5`hhubah}(h]h ]h"]h$]h&]uh1jhju_hhhj_hMD ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jP`j3jP`j4uh1hhhhjIhNhNubjl)}(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_dec_return_release() elsewhere. **Return** The updated value of **v**.h](j6)}(h**Parameters**h]jv)}(hjZ`h]h Parameters}(hhhj\`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjX`ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hjT`ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjy`h]h atomic64_t *v}(hhhj{`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.hhMD hjs`ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hMD hj`ubah}(h]h ]h"]h$]h&]uh1jhjs`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMD hjp`ubah}(h]h ]h"]h$]h&]uh1jhjT`ubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hjT`ubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hj`hhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh to (}(h to (hj`hhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh - 1) with release ordering.}(h - 1) with release ordering.hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hjT`ubj6)}(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.}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMH hjT`ubj6)}(h **Return**h]jv)}(hjah]hReturn}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjT`ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj'ahhhNhNubjv)}(h**v**h]hv}(hhhj0ahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'aubh.}(hjPhj'ahhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjT`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_relaxed (C function)!c.raw_atomic64_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjlahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiaubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjnamodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_dec_return_relaxedsb!c.raw_atomic64_dec_return_relaxedasbuh1hhjeahhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM] ubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeahhhjahM] ubh)}(hraw_atomic64_dec_return_relaxedh]h)}(hjah]hraw_atomic64_dec_return_relaxed}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhjeahhhjahM] ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]ja!c.raw_atomic64_dec_return_relaxedasbuh1hhjaubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjaubh)}(hj h]hv}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjaubah}(h]h ]h"]h$]h&]jj uh1jhjeahhhjahM] ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjaahhhjahM] ubah}(h]j\aah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMe hj^ahhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj#bhj!bhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ hjbhhubah}(h]h ]h"]h$]h&]uh1jhj^ahhhjahM] ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j9bj3j9bj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjCbh]h Parameters}(hhhjEbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAbubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM` hj=bubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjbbh]h atomic64_t *v}(hhhjdbhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`bubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM] hj\bubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj}bhj{bhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwbhM] hjxbubah}(h]h ]h"]h$]h&]uh1jhj\bubeh}(h]h ]h"]h$]h&]uh1jhjwbhM] hjYbubah}(h]h ]h"]h$]h&]uh1jhj=bubj6)}(h**Description**h]jv)}(hjbh]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_ hj=bubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjbhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh to (}(h to (hjbhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_ hj=bubj6)}(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.}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMa hj=bubj6)}(h **Return**h]jv)}(hjbh]hReturn}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hj=bubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjchhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubh.}(hjPhjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hj=bubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_dec (C function)c.raw_atomic64_fetch_dechNtauh1hhjIhhhNhNubh)}(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}(hhhjUchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWcmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_decsbc.raw_atomic64_fetch_decasbuh1hhjNchhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs ubj9)}(h h]h }(hhhjwchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNchhhjvchMs ubh)}(hraw_atomic64_fetch_dech]h)}(hjsch]hraw_atomic64_fetch_dec}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNchhhjvchMs ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcmodnameN classnameNjajd)}jg]jqcc.raw_atomic64_fetch_decasbuh1hhjcubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjcubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcubh)}(hj h]hv}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjcubah}(h]h ]h"]h$]h&]jj uh1jhjNchhhjvchMs ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJchhhjvchMs ubah}(h]jEcah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ hjGchhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj dhj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjdhhubah}(h]h ]h"]h$]h&]uh1jhjGchhhjvchMs ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j"dj3j"dj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj,dh]h Parameters}(hhhj.dhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*dubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj&dubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjKdh]h atomic64_t *v}(hhhjMdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIdubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hjEdubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfdhjddhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`dhMs hjadubah}(h]h ]h"]h$]h&]uh1jhjEdubeh}(h]h ]h"]h$]h&]uh1jhj`dhMs hjBdubah}(h]h ]h"]h$]h&]uh1jhj&dubj6)}(h**Description**h]jv)}(hjdh]h Description}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj&dubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjdhhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh to (}(h to (hjdhhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh - 1) with full ordering.}(h - 1) with full ordering.hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj&dubj6)}(hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.}(hjdhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMw hj&dubj6)}(h **Return**h]jv)}(hjdh]hReturn}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hj&dubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjdhhhNhNubjv)}(h**v**h]hv}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh.}(hjPhjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hj&dubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_acquire (C function) c.raw_atomic64_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj>ehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;eubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj@emodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_dec_acquiresb c.raw_atomic64_fetch_dec_acquireasbuh1hhj7ehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj`ehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ehhhj_ehM ubh)}(hraw_atomic64_fetch_dec_acquireh]h)}(hj\eh]hraw_atomic64_fetch_dec_acquire}(hhhjrehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjneubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7ehhhj_ehM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjemodnameN classnameNjajd)}jg]jZe c.raw_atomic64_fetch_dec_acquireasbuh1hhjeubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubj~)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjeubh)}(hj h]hv}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjeubah}(h]h ]h"]h$]h&]jj uh1jhj7ehhhj_ehM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3ehhhj_ehM ubah}(h]j.eah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0ehhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjehhubah}(h]h ]h"]h$]h&]uh1jhj0ehhhj_ehM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j fj3j fj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj4fh]h atomic64_t *v}(hhhj6fhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2fubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.fubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjOfhjMfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIfhM hjJfubah}(h]h ]h"]h$]h&]uh1jhj.fubeh}(h]h ]h"]h$]h&]uh1jhjIfhM hj+fubah}(h]h ]h"]h$]h&]uh1jhjfubj6)}(h**Description**h]jv)}(hjofh]h Description}(hhhjqfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmfubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh to (}(h to (hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubj6)}(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.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubj6)}(h **Return**h]jv)}(hjfh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh.}(hjPhjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_release (C function) c.raw_atomic64_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj'ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$gubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)gmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_dec_releasesb c.raw_atomic64_fetch_dec_releaseasbuh1hhj ghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjIghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ghhhjHghM ubh)}(hraw_atomic64_fetch_dec_releaseh]h)}(hjEgh]hraw_atomic64_fetch_dec_release}(hhhj[ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWgubah}(h]h ](jjeh"]h$]h&]jj uh1hhj ghhhjHghM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjyghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvgubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{gmodnameN classnameNjajd)}jg]jCg c.raw_atomic64_fetch_dec_releaseasbuh1hhjrgubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrgubj~)}(hjh]h*}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjrgubh)}(hj h]hv}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrgubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjngubah}(h]h ]h"]h$]h&]jj uh1jhj ghhhjHghM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjHghM ubah}(h]jgah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjghhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjghhubah}(h]h ]h"]h$]h&]uh1jhjghhhjHghM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jgj3jgj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjhh]h atomic64_t *v}(hhhjhhhhNhNubah}(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.hhM hjhubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj8hhj6hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hhM hj3hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj2hhM hjhubah}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjXhh]h Description}(hhhjZhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVhubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hjnhhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnhubh to (}(h to (hjnhhhhNhNubjv)}(h**v**h]hv}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnhubh - 1) with release ordering.}(h - 1) with release ordering.hjnhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubj6)}(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.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubj6)}(h **Return**h]jv)}(hjhh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhhNhNubjv)}(h**v**h]hv}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubh.}(hjPhjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_relaxed (C function) c.raw_atomic64_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj iubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjimodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_dec_relaxedsb c.raw_atomic64_fetch_dec_relaxedasbuh1hhj ihhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhj2ihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ihhhj1ihM ubh)}(hraw_atomic64_fetch_dec_relaxedh]h)}(hj.ih]hraw_atomic64_fetch_dec_relaxed}(hhhjDihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@iubah}(h]h ](jjeh"]h$]h&]jj uh1hhj ihhhj1ihM ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjbihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_iubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdimodnameN classnameNjajd)}jg]j,i c.raw_atomic64_fetch_dec_relaxedasbuh1hhj[iubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[iubj~)}(hjh]h*}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[iubh)}(hj h]hv}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[iubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWiubah}(h]h ]h"]h$]h&]jj uh1jhj ihhhj1ihM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhj1ihM ubah}(h]jiah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjihhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjihhubah}(h]h ]h"]h$]h&]uh1jhjihhhj1ihM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjih]h Parameters}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjjh]h atomic64_t *v}(hhhjjhhhNhNubah}(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.hhM hjjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj!jhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhM hjiubah}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h**Description**h]jv)}(hjAjh]h Description}(hhhjCjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?jubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjWjhhhNhNubjv)}(h**v**h]hv}(hhhj`jhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWjubh to (}(h to (hjWjhhhNhNubjv)}(h**v**h]hv}(hhhjsjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWjubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hjWjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubj6)}(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.}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubj6)}(h **Return**h]jv)}(hjjh]hReturn}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjjhhhNhNubjv)}(h**v**h]hv}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh.}(hjPhjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_and (C function)c.raw_atomic64_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjhhhjkhM ubh)}(hraw_atomic64_andh]h)}(hraw_atomic64_andh]hraw_atomic64_and}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhjkhM ubj)}(h(s64 i, atomic64_t *v)h](j$)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hhhj6khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3kubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj8kmodnameN classnameNjajd)}jg]jj)}j]jksbc.raw_atomic64_andasbuh1hhj/kubj9)}(h h]h }(hhhjVkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/kubh)}(hj\h]hi}(hhhjdkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/kubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj+kubj$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|kubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjkmodnameN classnameNjajd)}jg]jRkc.raw_atomic64_andasbuh1hhjxkubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxkubj~)}(hjh]h*}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxkubh)}(hj h]hv}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj+kubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhjkhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjkhM ubah}(h]jjah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjjhhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjkhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjkhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hj#lh]hs64 i}(hhhj%lhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!lubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubj)}(hhh]j6)}(h s64 valueh]h s64 value}(hj>lhjhjuubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjvhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh.}(hjPhjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic64_andnot (C function)c.raw_atomic64_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhjyhjh]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hAtomically updates hjThhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh to (}(h to (hjThhhNhNubjv)}(h**v**h]hv}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh & }(h & hjThhhNhNubjv)}(h**~i**h]h~i}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh) with release ordering.}(h) with release ordering.hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjĀhhhNhNubjv)}(h**v**h]hv}(hhhj̀5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjĀubh.}(hjPhjĀhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_fetch_andnot_relaxed (C function)#c.raw_atomic64_fetch_andnot_relaxedhNtauh1hhjIhhhNhNubh)}(hhh](h)}(hSafe to use in noinstr code; prefer atomic64_xchg() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj6hhhNhNubjv)}(h**v**h]hv}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubh.}(hjPhj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_acquire (C function)c.raw_atomic64_xchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj}modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_xchg_acquiresbc.raw_atomic64_xchg_acquireasbuh1hhjthhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjthhhjhMubh)}(hraw_atomic64_xchg_acquireh]h)}(hjh]hraw_atomic64_xchg_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhMubj)}(h(atomic64_t *v, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj͞hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʞubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjϞmodnameN classnameNjajd)}jg]jc.raw_atomic64_xchg_acquireasbuh1hhjƞubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjƞubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjƞubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƞubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjžubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jc.raw_atomic64_xchg_acquireasbuh1hhjubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjžubeh}(h]h ]h"]h$]h&]jj uh1jhjthhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhMubah}(h]jkah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjmhhubj)}(hhh]j6)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjԟhjҟhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjΟ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<)}(hjh]hs64 new}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hAtomically updates hjChhhNhNubjv)}(h**v**h]hv}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh to }(h to hjChhhNhNubjv)}(h**new**h]hnew}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh with acquire ordering.}(h with acquire ordering.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_release (C function)c.raw_atomic64_xchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}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.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjޠhhhjhMubh)}(hraw_atomic64_xchg_releaseh]h)}(hjh]hraw_atomic64_xchg_release}(hhhjhhhNhNubah}(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}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj9modnameN classnameNjajd)}jg]jc.raw_atomic64_xchg_releaseasbuh1hhj0ubj9)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0ubj~)}(hjh]h*}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0ubh)}(hj h]hv}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,ubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_xchg_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjנhhubj)}(hhh]j6)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhj%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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hj\h]hs64 new}(hhhj^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]j6)}(hs64 value to assignh]hs64 value to assign}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjɢhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_relaxed (C function)c.raw_atomic64_xchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjQmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_xchg_relaxedsbc.raw_atomic64_xchg_relaxedasbuh1hhjHhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHhhhjphM ubh)}(hraw_atomic64_xchg_relaxedh]h)}(hjmh]hraw_atomic64_xchg_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjphM ubj)}(h(atomic64_t *v, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jkc.raw_atomic64_xchg_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjͣhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjڣhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jkc.raw_atomic64_xchg_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjHhhhjphM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjphM ubah}(h]j?ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAhhubj)}(hhh]j6)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjIhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjphM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jdj3jdj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjƤh]hs64 new}(hhhjȤ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]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjߤhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjۤhM hjܤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۤhM hjubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhubj6)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with relaxed ordering.}(h with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhubj6)}(hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(h **Return**h]jv)}(hj^h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjthhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh.}(hjPhjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic64_cmpxchg (C function)c.raw_atomic64_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_cmpxchgsbc.raw_atomic64_cmpxchgasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!ubj9)}(h h]h }(hhhjۥhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjڥhM!ubh)}(hraw_atomic64_cmpxchgh]h)}(hjץh]hraw_atomic64_cmpxchg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jեc.raw_atomic64_cmpxchgasbuh1hhjubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]jեc.raw_atomic64_cmpxchgasbuh1hhjXubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jեc.raw_atomic64_cmpxchgasbuh1hhjubj9)}(h h]h }(hhhjŦhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjӦhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjAhhhNhNubah}(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!hj9ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThM!hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThM!hj6ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hjxh]hs64 old}(hhhjzhhhNhNubah}(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"hjrubj)}(hhh]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM"hj6ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjh]hs64 new}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hj̧hjʧhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjƧhM#hjǧubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƧhM#hj6ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubj6)}(hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_acquire (C function)c.raw_atomic64_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjݨhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڨubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjߨmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_cmpxchg_acquiresbc.raw_atomic64_cmpxchg_acquireasbuh1hhj֨hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj֨hhhjhM>ubh)}(hraw_atomic64_cmpxchg_acquireh]h)}(hjh]hraw_atomic64_cmpxchg_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj֨hhhjhM>ubj)}(h!(atomic64_t *v, s64 old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_acquireasbuh1hhj(ubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubj~)}(hjh]h*}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(ubh)}(hj h]hv}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$ubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_acquireasbuh1hhj|ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$ubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj˩hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȩubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjͩmodnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_acquireasbuh1hhjĩubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjĩubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĩubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj$ubeh}(h]h ]h"]h$]h&]jj uh1jhj֨hhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjҨhhhjhM>ubah}(h]jͨah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhjϨhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2j:j3j:j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjDh]h Parameters}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjch]h atomic64_t *v}(hhhjehhhNhNubah}(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>hj]ubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhM>hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM>hjZubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hjh]hs64 old}(hhhjhhhNhNubah}(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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjZubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjժh]hs64 new}(hhhjת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]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjϪubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj>ubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj&hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh == }(h == hj&hhhNhNubjv)}(h**old**h]hold}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh), atomically updates }(h), atomically updates hj&hhhNhNubjv)}(h**v**h]hv}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh to }(h to hj&hhhNhNubjv)}(h**new**h]hnew}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hj&hhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj>ubj6)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhj>ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhj>ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjūhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_release (C function)c.raw_atomic64_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]raw_atomic64_cmpxchg_releasesbc.raw_atomic64_cmpxchg_releaseasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj"hM[ubh)}(hraw_atomic64_cmpxchg_releaseh]h)}(hjh]hraw_atomic64_cmpxchg_release}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(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}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjLubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjHubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubj9)}(h h]h }(hhhjŬhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(holdh]hold}(hhhjӬhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjHubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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 juh1hjjhjhhhj"hM[ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhj"hM[ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j^j3j^j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjbubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[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}(hhhj­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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjۭhj٭hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjխ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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjbubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjJhhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh == }(h == hjJhhhNhNubjv)}(h**old**h]hold}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh), atomically updates }(h), atomically updates hjJhhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh to }(h to hjJhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjJhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjbubj6)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbhjbubj6)}(h **Return**h]jv)}(hjʮh]hReturn}(hhhj̮hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȮubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjbubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_relaxed (C function)c.raw_atomic64_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_cmpxchg_relaxedsbc.raw_atomic64_cmpxchg_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjFhMwubh)}(hraw_atomic64_cmpxchg_relaxedh]h)}(hjCh]hraw_atomic64_cmpxchg_relaxed}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjFhMwubj)}(h!(atomic64_t *v, s64 old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjymodnameN classnameNjajd)}jg]jAc.raw_atomic64_cmpxchg_relaxedasbuh1hhjpubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjpubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjpubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubj$)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hhhj˯hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȯubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjͯmodnameN classnameNjajd)}jg]jAc.raw_atomic64_cmpxchg_relaxedasbuh1hhjįubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjįubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjįubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jAc.raw_atomic64_cmpxchg_relaxedasbuh1hhj ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hnewh]hnew}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjFhMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjFhMwubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjFhMwubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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.hhMwhjubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjưhjİhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j<)}(hjh]hs64 old}(hhhjhhhNhNubah}(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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjްubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjh]hs64 new}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMyhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjnhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh == }(h == hjnhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh), atomically updates }(h), atomically updates hjnhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh to }(h to hjnhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjnhhhNhNubjv)}(h**v**h]hv}(hhhjñhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjubj6)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.}(hj߱hjݱhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic64_try_cmpxchg (C function)c.raw_atomic64_try_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBhhhjShMubh)}(hraw_atomic64_try_cmpxchgh]h)}(hraw_atomic64_try_cmpxchgh]hraw_atomic64_try_cmpxchg}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjShMubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jhsbc.raw_atomic64_try_cmpxchgasbuh1hhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhj۲hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjزubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjݲmodnameN classnameNjajd)}jg]jc.raw_atomic64_try_cmpxchgasbuh1hhjԲubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjԲubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjԲubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԲubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj2modnameN classnameNjajd)}jg]jc.raw_atomic64_try_cmpxchgasbuh1hhj)ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hnewh]hnew}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjBhhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhjShMubah}(h]j9ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj;hhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjShMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjʳ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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjݳhMhj޳ubah}(h]h ]h"]h$]h&]uh1jhj³ubeh}(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}(hhhjhhhNhNubah}(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]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj:h]hs64 new}(hhhj<hhhNhNubah}(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.hhMhj4ubj)}(hhh]j6)}(hs64 value to assignh]hs64 value to assign}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjuh]h Description}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjʹhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj1h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh if the exchange occured, }(h if the exchange occured, hjGhhhNhNubjv)}(h **false**h]hfalse}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh otherwise.}(h otherwise.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_acquire (C function)"c.raw_atomic64_try_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_acquireh]h)}(h raw_atomic64_try_cmpxchg_acquireh]h raw_atomic64_try_cmpxchg_acquire}(hhhjhhhNhNubah}(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}(hhhj׵hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԵubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjٵmodnameN classnameNjajd)}jg]jj)}j]jsb"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjеubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjеubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjеubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjеubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj̵ubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/modnameN classnameNjajd)}jg]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhj&ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(holdh]hold}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj̵ubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj۶hjٶhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj0ubah}(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<)}(hjSh]hs64 *old}(hhhjUhhhNhNubah}(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]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hjh]hs64 new}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjǷh]h Description}(hhhjɷhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjŷubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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 (}(hIf (hjݷhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh == }(h == hjݷhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh), atomically updates }(h), atomically updates hjݷhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh to }(h to hjݷhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjݷhhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh is not modified, }(h is not modified, hjݷhhhNhNubjv)}(h**old**h]hold}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh$ is updated to the current value of }(h$ is updated to the current value of hjݷhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjݷubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjݷhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_release (C function)"c.raw_atomic64_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_releaseh]h)}(h raw_atomic64_try_cmpxchg_releaseh]h raw_atomic64_try_cmpxchg_release}(hhhj hhhNhNubah}(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}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]j sb"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj"ubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj~)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"ubh)}(hj h]hv}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jE"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjxubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxubh)}(holdh]hold}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhjԹhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѹubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjֹmodnameN classnameNjajd)}jg]jE"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj͹ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj͹ubh)}(hnewh]hnew}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj߸hhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jCj3jCj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjlh]h atomic64_t *v}(hhhjnhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j<)}(hjh]hs64 *old}(hhhjhhhNhNubah}(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]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j<)}(hj޺h]hs64 new}(hhhjhhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjغubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj6)}(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 (}(hIf (hj/hhhNhNubjv)}(h**v**h]hv}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh == }(h == hj/hhhNhNubjv)}(h**old**h]hold}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh), atomically updates }(h), atomically updates hj/hhhNhNubjv)}(h**v**h]hv}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh to }(h to hj/hhhNhNubjv)}(h**new**h]hnew}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hj/hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh is not modified, }(h is not modified, hj/hhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh$ is updated to the current value of }(h$ is updated to the current value of hj/hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj6)}(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ƻhjĻhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj6)}(h **Return**h]jv)}(hjջh]hReturn}(hhhj׻hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӻubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_relaxed (C function)"c.raw_atomic64_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8hhhjIhMubh)}(h raw_atomic64_try_cmpxchg_relaxedh]h)}(h raw_atomic64_try_cmpxchg_relaxedh]h raw_atomic64_try_cmpxchg_relaxed}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjIhMubj)}(h"(atomic64_t *v, s64 *old, s64 new)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj}modnameN classnameNjajd)}jg]jj)}j]j^sb"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjtubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjtubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjpubj$)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hhhjѼhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjμubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjӼmodnameN classnameNjajd)}jg]j"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjʼubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjʼubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjʼubh)}(holdh]hold}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʼubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjpubj$)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj(modnameN classnameNjajd)}jg]j"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjpubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjIhMubah}(h]j/ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj1hhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjIhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjٽhj׽hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjӽ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}(hhhjhhhNhNubah}(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]j6)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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<)}(hj0h]hs64 new}(hhhj2hhhNhNubah}(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]j6)}(hs64 value to assignh]hs64 value to assign}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjkh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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 (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh == }(h == hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**new**h]hnew}(hhhjþhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj־hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is not modified, }(h is not modified, hjhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is updated to the current value of }(h$ is updated to the current value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj'h]hReturn}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh if the exchange occured, }(h if the exchange occured, hj=hhhNhNubjv)}(h **false**h]hfalse}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh otherwise.}(h otherwise.hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_sub_and_test (C function)c.raw_atomic64_sub_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic64_sub_and_testh]h)}(hraw_atomic64_sub_and_testh]hraw_atomic64_sub_and_test}(hhhjhhhNhNubah}(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}(hhhjͿhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʿubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjϿmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic64_sub_and_testasbuh1hhjƿubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjƿubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_sub_and_testasbuh1hhjubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjOhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to subtracth]hs64 value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj.h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjDhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh to (}(h to (hjDhhhNhNubjv)}(h**v**h]hv}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh - }(h - hjDhhhNhNubjv)}(h**i**h]hi}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubh) with full ordering.}(h) with full ordering.hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_dec_and_test (C function)c.raw_atomic64_dec_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj%hM(ubh)}(hraw_atomic64_dec_and_testh]h)}(hraw_atomic64_dec_and_testh]hraw_atomic64_dec_and_test}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hM(ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYmodnameN classnameNjajd)}jg]jj)}j]j:sbc.raw_atomic64_dec_and_testasbuh1hhjPubj9)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjLubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hM(ubah}(h]j ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0hj hhubj)}(hhh]j6)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj8h]h Description}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjNhhhNhNubjv)}(h**v**h]hv}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh to (}(h to (hjNhhhNhNubjv)}(h**v**h]hv}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh - 1) with full ordering.}(h - 1) with full ordering.hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_inc_and_test (C function)c.raw_atomic64_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhjhM<ubh)}(hraw_atomic64_inc_and_testh]h)}(hraw_atomic64_inc_and_testh]hraw_atomic64_inc_and_test}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(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}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjPmodnameN classnameNjajd)}jg]jj)}j]j1sbc.raw_atomic64_inc_and_testasbuh1hhjGubj9)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubj~)}(hjh]h*}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjGubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjCubah}(h]h ]h"]h$]h&]jj uh1jhj hhhjhM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM<ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjhhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM<hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM<hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj/h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjEhhhNhNubjv)}(h**v**h]hv}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh to (}(h to (hjEhhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh + 1) with full ordering.}(h + 1) with full ordering.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj6)}(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.}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_add_negative (C function)c.raw_atomic64_add_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMPubh)}(hraw_atomic64_add_negativeh]h)}(hraw_atomic64_add_negativeh]hraw_atomic64_add_negative}(hhhj&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}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjGmodnameN classnameNjajd)}jg]jj)}j]j(sbc.raw_atomic64_add_negativeasbuh1hhj>ubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubh)}(hj\h]hi}(hhhjshhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jac.raw_atomic64_add_negativeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjhhubj)}(hhh]j6)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMPubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShj ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j<)}(hj2h]hs64 i}(hhhj4hhhNhNubah}(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.hhMPhj,ubj)}(hhh]j6)}(hs64 value to addh]hs64 value to add}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhMPhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMPhj)ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjkh]h atomic64_t *v}(hhhjmhhhNhNubah}(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.hhMQhjeubj)}(hhh]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMQhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShj ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShj ubj6)}(hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhj ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh if the resulting value of }(h if the resulting value of hj,hhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh is negative, }(h is negative, hj,hhhNhNubjv)}(h **false**h]hfalse}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubh otherwise.}(h otherwise.hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_add_negative_acquire (C function)#c.raw_atomic64_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_acquire (s64 i, atomic64_t *v)h]h)}(hs64 raw_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)h](h)}(hhh]h)}(hs64h]hs64}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj3modnameN classnameNjajd)}jg]jj)}j]raw_atomic64_fetch_add_unlesssbc.raw_atomic64_fetch_add_unlessasbuh1hhj*hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*hhhjRhMubh)}(hraw_atomic64_fetch_add_unlessh]h)}(hjOh]hraw_atomic64_fetch_add_unless}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhjRhMubj)}(h(atomic64_t *v, s64 a, s64 u)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jMc.raw_atomic64_fetch_add_unlessasbuh1hhj|ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj|ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubj$)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jMc.raw_atomic64_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubj$)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jMc.raw_atomic64_fetch_add_unlessasbuh1hhjubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjQh]hu}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubeh}(h]h ]h"]h$]h&]jj uh1jhj*hhhjRhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhjRhMubah}(h]j!ah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj#hhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhjRhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj'h]hs64 u}(hhhj)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]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjbh]h Description}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjxhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh != }(h != hjxhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh), atomically updates }(h), atomically updates hjxhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh to (}(h to (hjxhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh + }(h + hjxhhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjxhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj!hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubh.}(hjPhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_add_unless (C function)c.raw_atomic64_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_hhhjphMubh)}(hraw_atomic64_add_unlessh]h)}(hraw_atomic64_add_unlessh]hraw_atomic64_add_unless}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjphMubj)}(h(atomic64_t *v, s64 a, s64 u)h](j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic64_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.raw_atomic64_add_unlessasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjAmodnameN classnameNjajd)}jg]jc.raw_atomic64_add_unlessasbuh1hhj8ubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8ubh)}(hjQh]hu}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhjphMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjphMubah}(h]jVah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjXhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjphMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hs64 value to addh]hs64 value to add}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]j<)}(hjHh]hs64 u}(hhhjJhhhNhNubah}(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.hhMhjBubj)}(hhh]j6)}(hs64 value to compare withh]hs64 value to compare with}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**u**h]hu}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh), atomically updates }(h), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hj,h]hReturn}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh if }(h if hjBhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh was updated, }(h was updated, hjBhhhNhNubjv)}(h **false**h]hfalse}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubh otherwise.}(h otherwise.hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_inc_not_zero (C function)c.raw_atomic64_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic64_inc_not_zeroh]h)}(hraw_atomic64_inc_not_zeroh]hraw_atomic64_inc_not_zero}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic64_inc_not_zeroasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj 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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jbj3jbj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j<)}(hjh]h atomic64_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != 0), atomically updates }(h != 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj6)}(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.}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj6)}(h **Return**h]jv)}(hjIh]hReturn}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh if }(h if hj_hhhNhNubjv)}(h**v**h]hv}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh was updated, }(h was updated, hj_hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh otherwise.}(h otherwise.hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_inc_unless_negative (C function)"c.raw_atomic64_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h raw_atomic64_inc_unless_negativeh]h)}(h raw_atomic64_inc_unless_negativeh]h raw_atomic64_inc_unless_negative}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb"c.raw_atomic64_inc_unless_negativeasbuh1hhjubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj=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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh >= 0), atomically updates }(h >= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h **Return**h]jv)}(hjfh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh if }(h if hj|hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh was updated, }(h was updated, hj|hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubh otherwise.}(h otherwise.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_dec_unless_positive (C function)"c.raw_atomic64_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h raw_atomic64_dec_unless_positiveh]h)}(h raw_atomic64_dec_unless_positiveh]h raw_atomic64_dec_unless_positive}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]jsb"c.raw_atomic64_dec_unless_positiveasbuh1hhjubj9)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjZhhhNhNubah}(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&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjhhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh <= 0), atomically updates }(h <= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj6)}(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.}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_dec_if_positive (C function)c.raw_atomic64_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}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.hhM9ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj!hM9ubh)}(hraw_atomic64_dec_if_positiveh]h)}(hjh]hraw_atomic64_dec_if_positive}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hM9ubj)}(h(atomic64_t *v)h]j$)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjTmodnameN classnameNjajd)}jg]jc.raw_atomic64_dec_if_positiveasbuh1hhjKubj9)}(h h]h }(hhhjphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubj~)}(hjh]h*}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjKubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjGubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hM9ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj!hM9ubah}(h]jah ](jjeh"]h$]h&]juh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjhhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM9ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM9hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM9hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj1h]h Description}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubj6)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjGhhhNhNubjv)}(h**v**h]hv}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh > 0), atomically updates }(h > 0), atomically updates hjGhhhNhNubjv)}(h**v**h]hv}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh to (}(h to (hjGhhhNhNubjv)}(h**v**h]hv}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjGhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubj6)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hThe old value of (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1), regardless of whether }(h - 1), regardless of whether hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated.}(h was updated.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_long_read (C function)c.raw_atomic_long_readhNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj.hKubh)}(hraw_atomic_long_readh]h)}(hraw_atomic_long_readh]hraw_atomic_long_read}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj.hKubj)}(h(const atomic_long_t *v)h]j$)}(hconst atomic_long_t *vh](j')}(hjn'h]hconst}(hhhj]hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjYubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj}modnameN classnameNjajd)}jg]jj)}j]jCsbc.raw_atomic_long_readasbuh1hhjYubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj.hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj.hKubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK"hjhhubj)}(hhh]j6)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hj!h]hconst atomic_long_t *v}(hhhj#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.hhKhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj\h]h Description}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hAtomically loads the value of hjrhhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh with relaxed ordering.}(h with relaxed ordering.hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK hjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_read_acquire (C function)c.raw_atomic_long_read_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK.ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hK.ubh)}(hraw_atomic_long_read_acquireh]h)}(hraw_atomic_long_read_acquireh]hraw_atomic_long_read_acquire}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hK.ubj)}(h(const atomic_long_t *v)h]j$)}(hconst atomic_long_t *vh](j')}(hjn'h]hconst}(hhhj;hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj7ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[modnameN classnameNjajd)}jg]jj)}j]j!sbc.raw_atomic_long_read_acquireasbuh1hhj7ubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hK.ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hK.ubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK6hjhhubj)}(hhh]j6)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hK.ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK0hjubj6)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hAtomically loads the value of hjPhhhNhNubjv)}(h**v**h]hv}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh with acquire ordering.}(h with acquire ordering.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK0hjubj6)}(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.}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK2hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK4hjubj6)}(hThe value loaded from **v**.h](hThe value loaded from }(hThe value loaded from hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_set (C function)c.raw_atomic_long_sethNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKBubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKBubh)}(hraw_atomic_long_seth]h)}(hraw_atomic_long_seth]hraw_atomic_long_set}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKBubj)}(h(atomic_long_t *v, long i)h](j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_setasbuh1hhjubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hlong ih](j)}(hlongh]hlong}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKBubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKKhjhhubj)}(hhh]j6)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKBubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubj)}(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}(hhhjhhhNhNubah}(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.hhKBhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKBhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKBhjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j<)}(hj/h]hlong i}(hhhj1hhhNhNubah}(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.hhKChj)ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhKChjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKChjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjjh]h Description}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubj6)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with relaxed ordering.}(h with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKGhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKIhjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_long_set_release (C function)c.raw_atomic_long_set_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKWubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKWubh)}(hraw_atomic_long_set_releaseh]h)}(hraw_atomic_long_set_releaseh]hraw_atomic_long_set_release}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKWubj)}(h(atomic_long_t *v, long i)h](j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjNmodnameN classnameNjajd)}jg]jj)}j]j/sbc.raw_atomic_long_set_releaseasbuh1hhjEubj9)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjEubj~)}(hjh]h*}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjEubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubj$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKWubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKWubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK`hjhhubj)}(hhh]j6)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKWubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hj&h]hatomic_long_t *v}(hhhj(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.hhKWhj ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hKWhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKWhjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j<)}(hj_h]hlong i}(hhhjahhhNhNubah}(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.hhKXhjYubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthKXhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKXhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubj6)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hAtomically sets hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with release ordering.}(h with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK\hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK^hjubj6)}(hNothing.h]hNothing.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_add (C function)c.raw_atomic_long_addhNtauh1hhjIhhhNhNubh)}(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}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKlubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8hhhjJhKlubh)}(hraw_atomic_long_addh]h)}(hraw_atomic_long_addh]hraw_atomic_long_add}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjJhKlubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjqubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j_sbc.raw_atomic_long_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjqubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhjJhKlubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjJhKlubah}(h]j/ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKuhj1hhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhKlubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j-j3j-j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohj1ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjVh]hlong i}(hhhjXhhhNhNubah}(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.hhKlhjPubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhKlhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKlhjMubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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.hhKmhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKmhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohj1ubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohj1ubj6)}(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.}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKqhj1ubj6)}(h **Return**h]jv)}(hj:h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKshj1ubj6)}(hNothing.h]hNothing.}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKshj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_add_return (C function)c.raw_atomic_long_add_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{hhhjhKubh)}(hraw_atomic_long_add_returnh]h)}(hraw_atomic_long_add_returnh]hraw_atomic_long_add_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhKubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_add_returnasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjthhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjUhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjtubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj#hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh to (}(h to (hj#hhhNhNubjv)}(h**v**h]hv}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh + }(h + hj#hhhNhNubjv)}(h**i**h]hi}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubh) with full ordering.}(h) with full ordering.hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubj6)}(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.}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubj6)}(h **Return**h]jv)}(hj}h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_acquire (C function)$c.raw_atomic_long_add_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(h"raw_atomic_long_add_return_acquireh]h)}(h"raw_atomic_long_add_return_acquireh]h"raw_atomic_long_add_return_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj.hhhNhNubah}(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}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_add_return_acquireasbuh1hhjBubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBubj~)}(hjh]h*}(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjBubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhj*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.hhKhj"ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh to (}(h to (hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh + }(h + hjyhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh) with acquire ordering.}(h) with acquire ordering.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_release (C function)$c.raw_atomic_long_add_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'hhhj9hKubh)}(h"raw_atomic_long_add_return_releaseh]h)}(h"raw_atomic_long_add_return_releaseh]h"raw_atomic_long_add_return_release}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hKubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jNsb$c.raw_atomic_long_add_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hKubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj hhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hjEh]hlong i}(hhhjGhhhNhNubah}(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.hhKhj?ubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhKhj<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}(hhhjhhhNhNubah}(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.hhKhjxubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhKhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubj6)}(h **Return**h]jv)}(hj)h]hReturn}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj?hhhNhNubjv)}(h**v**h]hv}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubh.}(hjPhj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_relaxed (C function)$c.raw_atomic_long_add_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}hhhjhKubh)}(h"raw_atomic_long_add_return_relaxedh]h)}(h"raw_atomic_long_add_return_relaxedh]h"raw_atomic_long_add_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhjhKubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_add_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj}hhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjhKubah}(h]jtah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvhhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jrj3jrj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjvubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj%hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh to (}(h to (hj%hhhNhNubjv)}(h**v**h]hv}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh + }(h + hj%hhhNhNubjv)}(h**i**h]hi}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh) with relaxed ordering.}(h) with relaxed ordering.hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubj6)}(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.}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_add (C function)c.raw_atomic_long_fetch_addhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hraw_atomic_long_fetch_addh]h)}(hraw_atomic_long_fetch_addh]hraw_atomic_long_fetch_add}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj0hhhNhNubah}(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}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_fetch_addasbuh1hhjDubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDubh)}(hj h]hv}(hhhjhhhNhNubah}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubj)}(hhh]j6)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhj,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.hhKhj$ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjeh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh to (}(h to (hj{hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh + }(h + hj{hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh) with full ordering.}(h) with full ordering.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_acquire (C function)#c.raw_atomic_long_fetch_add_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)hhhj;hKubh)}(h!raw_atomic_long_fetch_add_acquireh]h)}(h!raw_atomic_long_fetch_add_acquireh]h!raw_atomic_long_fetch_add_acquire}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hKubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjfubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jPsb#c.raw_atomic_long_fetch_add_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hKubah}(h]j ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"hhubj)}(hhh]j6)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj(h]h Parameters}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hjGh]hlong i}(hhhjIhhhNhNubah}(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.hhKhjAubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhj>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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with acquire ordering.}(h) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubj6)}(h **Return**h]jv)}(hj+h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjAhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh.}(hjPhjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_release (C function)#c.raw_atomic_long_fetch_add_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(h!raw_atomic_long_fetch_add_releaseh]h)}(h!raw_atomic_long_fetch_add_releaseh]h!raw_atomic_long_fetch_add_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb#c.raw_atomic_long_fetch_add_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj2hhhNhNubah}(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 juh1hjjhj{hhhjhKubah}(h]jvah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxhhubj)}(hhh]j6)}(h atomic add with release orderingh]h atomic add with release ordering}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjYhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj'hhhNhNubjv)}(h**v**h]hv}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh to (}(h to (hj'hhhNhNubjv)}(h**v**h]hv}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh + }(h + hj'hhhNhNubjv)}(h**i**h]hi}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh) with release ordering.}(h) with release ordering.hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj6)}(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.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_relaxed (C function)#c.raw_atomic_long_fetch_add_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h!raw_atomic_long_fetch_add_relaxedh]h)}(h!raw_atomic_long_fetch_add_relaxedh]h!raw_atomic_long_fetch_add_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj2hhhNhNubah}(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}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjOmodnameN classnameNjajd)}jg]jj)}j]jsb#c.raw_atomic_long_fetch_add_relaxedasbuh1hhjFubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFubj~)}(hjh]h*}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhj ubah}(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<)}(hj,h]hatomic_long_t *v}(hhhj.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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjgh]h Description}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh to (}(h to (hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh + }(h + hj}hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh) with relaxed ordering.}(h) with relaxed ordering.hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_sub (C function)c.raw_atomic_long_subhNtauh1hhjIhhhNhNubh)}(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}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)ubj9)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+hhhj=hM)ubh)}(hraw_atomic_long_subh]h)}(hraw_atomic_long_subh]hraw_atomic_long_sub}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj=hM)ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jRsbc.raw_atomic_long_subasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjdubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM2hj$hhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hM)ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj*h]h Parameters}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5he/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 to subtract h](j)}(h ``long i``h]j<)}(hjIh]hlong i}(hhhjKhhhNhNubah}(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.hhM)hjCubj)}(hhh]j6)}(hlong value to subtracth]hlong value to subtract}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hM)hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(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<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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*hj|ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM*hj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj$ubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj$ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM.hj$ubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hj$ubj6)}(hNothing.h]hNothing.}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_sub_return (C function)c.raw_atomic_long_sub_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnhhhjhM>ubh)}(hraw_atomic_long_sub_returnh]h)}(hraw_atomic_long_sub_returnh]hraw_atomic_long_sub_return}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhM>ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_sub_returnasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhM>ubah}(h]jeah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMGhjghhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjHhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhM>ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjgubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM>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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjgubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjgubj6)}(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.}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMChjgubj6)}(h **Return**h]jv)}(hjph]hReturn}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhjgubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_acquire (C function)$c.raw_atomic_long_sub_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMSubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMSubh)}(h"raw_atomic_long_sub_return_acquireh]h)}(h"raw_atomic_long_sub_return_acquireh]h"raw_atomic_long_sub_return_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj!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}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_sub_return_acquireasbuh1hhj5ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]u h1j8hj5ubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5ubh)}(hj h]hv}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMSubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\hjhhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMSubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMThj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMThjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjVh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjlhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubh to (}(h to (hjlhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubh - }(h - hjlhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubh) with acquire ordering.}(h) with acquire ordering.hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMXhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_release (C function)$c.raw_atomic_long_sub_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj,hMhubh)}(h"raw_atomic_long_sub_return_releaseh]h)}(h"raw_atomic_long_sub_return_releaseh]h"raw_atomic_long_sub_return_release}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hMhubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubh)}(hj\h]hi}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jAsb$c.raw_atomic_long_sub_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjSubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hMhubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hMhubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqhjhhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMhubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hj8h]hlong i}(hhhj:hhhNhNubah}(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.hhMhhj2ubj)}(hhh]j6)}(hlong value to subtracth]hlong value to subtract}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhhj/ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjqh]hatomic_long_t *v}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihjkubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMihjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMihj/ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMmhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj2hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh.}(hjPhj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_relaxed (C function)$c.raw_atomic_long_sub_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjphhhjhM}ubh)}(h"raw_atomic_long_sub_return_relaxedh]h)}(h"raw_atomic_long_sub_return_relaxedh]h"raw_atomic_long_sub_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhM}ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_sub_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjhM}ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhM}ubah}(h]jgah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjihhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjJhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhM}ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjoh]h Parameters}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hjh]hlong i}(hhhjhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM}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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubeh}(h]h ]h"]h$]h&]uh1jhjiubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with relaxed ordering.}(h) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj6)}(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.}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj6)}(h **Return**h]jv)}(hjrh]hReturn}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_sub (C function)c.raw_atomic_long_fetch_subhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_long_fetch_subh]h)}(hraw_atomic_long_fetch_subh]hraw_atomic_long_fetch_sub}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj#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}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj@modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_fetch_subasbuh1hhj7ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj~)}(hjh]h*}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubh)}(hj h]hv}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj h]hatomic_long_t *v}(hhhj 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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8 hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2 hMhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjX h]h Description}(hhhjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjV ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjn hhhNhNubjv)}(h**v**h]hv}(hhhjw hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn ubh to (}(h to (hjn hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn ubh - }(h - hjn hhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn ubh) with full ordering.}(h) with full ordering.hjn hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh.}(hjPhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_acquire (C function)#c.raw_atomic_long_fetch_sub_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj/ hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj hhhj. hMubh)}(h!raw_atomic_long_fetch_sub_acquireh]h)}(h!raw_atomic_long_fetch_sub_acquireh]h!raw_atomic_long_fetch_sub_acquire}(hhhjA 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}(hhhj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubj9)}(h h]h }(hhhjk hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjY ubh)}(hj\h]hi}(hhhjy hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjU ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jC sb#c.raw_atomic_long_fetch_sub_acquireasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjU 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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj hhubj)}(hhh]j6)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hj: h]hlong i}(hhhj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8 ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4 ubj)}(hhh]j6)}(hlong value to subtracth]hlong value to subtract}(hjU hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjO hMhjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubeh}(h]h ]h"]h$]h&]uh1jhjO hMhj1 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}(hhhju 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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjm ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj1 ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh - }(h - hj hhhNhNubjv)}(h**i**h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh) with acquire ordering.}(h) with acquire ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj4 hhhNhNubjv)}(h**v**h]hv}(hhhj= hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4 ubh.}(hjPhj4 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_release (C function)#c.raw_atomic_long_fetch_sub_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjr hhhj hMubh)}(h!raw_atomic_long_fetch_sub_releaseh]h)}(h!raw_atomic_long_fetch_sub_releaseh]h!raw_atomic_long_fetch_sub_release}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjr hhhj hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hj\h]hi}(hhhj 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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sb#c.raw_atomic_long_fetch_sub_releaseasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hj h]hv}(hhhj% hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjr hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjn hhhj hMubah}(h]ji ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk hhubj)}(hhh]j6)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjQ hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL hhubah}(h]h ]h"]h$]h&]uh1jhjk hhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jg j3jg j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjq h]h Parameters}(hhhjs hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjo ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j<)}(hj h]hlong i}(hhhj 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]j6)}(hlong value to subtracth]hlong value to subtract}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjk ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubj6)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - }(h - hjhhhNhNubjv)}(h**i**h]hi}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with release ordering.}(h) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubj6)}(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.}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubj6)}(h **Return**h]jv)}(hjth]hReturn}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_relaxed (C function)#c.raw_atomic_long_fetch_sub_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h!raw_atomic_long_fetch_sub_relaxedh]h)}(h!raw_atomic_long_fetch_sub_relaxedh]h!raw_atomic_long_fetch_sub_relaxed}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhj%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}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jj)}j]jsb#c.raw_atomic_long_fetch_sub_relaxedasbuh1hhj9ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9ubh)}(hj h]hv}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hlong value to subtracth]hlong value to subtract}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj!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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjphhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh to (}(h to (hjphhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh - }(h - hjphhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh) with relaxed ordering.}(h) with relaxed ordering.hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_inc (C function)c.raw_atomic_long_inchNtauh1hhjIhhhNhNubh)}(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}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj0hMubh)}(hraw_atomic_long_inch]h)}(hraw_atomic_long_inch]hraw_atomic_long_inc}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj0hMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]jEsbc.raw_atomic_long_incasbuh1hhj[ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[ubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj0hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj0hMubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj 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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjCh]h Description}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjYhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh to (}(h to (hjYhhhNhNubjv)}(h**v**h]hv}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hNothing.h]hNothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_inc_return (C function)c.raw_atomic_long_inc_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_long_inc_returnh]h)}(hraw_atomic_long_inc_returnh]hraw_atomic_long_inc_return}(hhhjhhhNhNubah}(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}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj'modnameN classnameNjajd)}jg]jj)}j]jsbc.raw_atomic_long_inc_returnasbuh1hhjubj9)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj`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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with full ordering.}(h + 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjch]hReturn}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjyhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubh.}(hjPhjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_acquire (C function)$c.raw_atomic_long_inc_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h"raw_atomic_long_inc_return_acquireh]h)}(h"raw_atomic_long_inc_return_acquireh]h"raw_atomic_long_inc_return_acquire}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_inc_return_acquireasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj6hhhNhNubah}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jxj3jxj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(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*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(hThe updated value of **v**.h](hThe updated value of #}(hThe updated value of hjOhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh.}(hjPhjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_release (C function)$c.raw_atomic_long_inc_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM"ubh)}(h"raw_atomic_long_inc_return_releaseh]h)}(h"raw_atomic_long_inc_return_releaseh]h"raw_atomic_long_inc_return_release}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_inc_return_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj 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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hjhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM"ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hjRubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjwh]hatomic_long_t *v}(hhhjyhhhNhNubah}(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.hhM"hjqubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjnubah}(h]h ]h"]h$]h&]uh1jhjRubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjRubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with release ordering.}(h + 1) with release ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjRubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hjRubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjRubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj%hhhNhNubjv)}(h**v**h]hv}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh.}(hjPhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_relaxed (C function)$c.raw_atomic_long_inc_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6ubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjchhhjuhM6ubh)}(h"raw_atomic_long_inc_return_relaxedh]h)}(h"raw_atomic_long_inc_return_relaxedh]h"raw_atomic_long_inc_return_relaxed}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjuhM6ubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb$c.raw_atomic_long_inc_return_relaxedasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjchhhjuhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhjuhM6ubah}(h]jZah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hj\hhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hj hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhM6ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hjMh]hatomic_long_t *v}(hhhjOhhhNhNubah}(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.hhM6hjGubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhM6hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM6hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj(ubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj(ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hj(ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj(ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_inc (C function)c.raw_atomic_long_fetch_inchNtauh1hhjIhhhNhNubh)}(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}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9hhhjKhMJubh)}(hraw_atomic_long_fetch_inch]h)}(hraw_atomic_long_fetch_inch]hraw_atomic_long_fetch_inc}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhjKhMJubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j`sbc.raw_atomic_long_fetch_incasbuh1hhjvubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjvubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjrubah}(h]h ]h"]h$]h&]jj uh1jhj9hhhjKhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhjKhMJubah}(h]j0ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhj2hhubj)}(hhh]j6)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhMJubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hj#h]hatomic_long_t *v}(hhhj%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.hhMJhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMJhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMJhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj^h]h Description}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjthhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh to (}(h to (hjthhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh + 1) with full ordering.}(h + 1) with full ordering.hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_acquire (C function)#c.raw_atomic_long_fetch_inc_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^ubj9)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj!hM^ubh)}(h!raw_atomic_long_fetch_inc_acquireh]h)}(h!raw_atomic_long_fetch_inc_acquireh]h!raw_atomic_long_fetch_inc_acquire}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(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}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jj)}j]j6sb#c.raw_atomic_long_fetch_inc_acquireasbuh1hhjLubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjLubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjHubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj!hM^ubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjhhubj)}(hhh]j6)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM^ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjubj6)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hjJhhhNhNubjv)}(h**v**h]hv}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh to (}(h to (hjJhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh + 1) with acquire ordering.}(h + 1) with acquire ordering.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_release (C function)#c.raw_atomic_long_fetch_inc_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMrubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMrubh)}(h!raw_atomic_long_fetch_inc_releaseh]h)}(h!raw_atomic_long_fetch_inc_releaseh]h!raw_atomic_long_fetch_inc_release}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMrubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj+modnameN classnameNjajd)}jg]jj)}j]j sb#c.raw_atomic_long_fetch_inc_releaseasbuh1hhj"ubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"ubj~)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"ubh)}(hj h]hv}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMrubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhjhhubj)}(hhh]j6)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMrubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjubj6)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + 1) with release ordering.}(h + 1) with release ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjubj6)}(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.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMvhjubj6)}(h **Return**h]jv)}(hjgh]hReturn}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj}hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh.}(hjPhj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_relaxed (C function)#c.raw_atomic_long_fetch_inc_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h!raw_atomic_long_fetch_inc_relaxedh]h)}(h!raw_atomic_long_fetch_inc_relaxedh]h!raw_atomic_long_fetch_inc_relaxed}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jsb#c.raw_atomic_long_fetch_inc_relaxedasbuh1hhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj- hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhj: 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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjf hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhja hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j| j3j| j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj 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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj hhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh to (}(h to (hj hhhNhNubjv)}(h**v**h]hv}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh + 1) with relaxed ordering.}(h + 1) with relaxed ordering.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(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.}(hj.!hj,!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(h **Return**h]jv)}(hj=!h]hReturn}(hhhj?!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;!ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjS!hhhNhNubjv)}(h**v**h]hv}(hhhj\!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjS!ubh.}(hjPhjS!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_dec (C function)c.raw_atomic_long_dechNtauh1hhjIhhhNhNubh)}(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}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!hhhj!hMubh)}(hraw_atomic_long_dech]h)}(hraw_atomic_long_dech]hraw_atomic_long_dec}(hhhj!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}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj!modnameN classnameNjajd)}jg]jj)}j]j!sbc.raw_atomic_long_decasbuh1hhj!ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj!ubj~)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj!ubh)}(hj h]hv}(hhhj"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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!hhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj<"hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jR"j3jR"j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\"h]h Parameters}(hhhj^"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZ"ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"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}(hhhj}"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.hhMhju"ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhju"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjr"ubah}(h]h ]h"]h$]h&]uh1jhjV"ubj6)}(h**Description**h]jv)}(hj"h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj"hhhNhNubjv)}(h**v**h]hv}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubh to (}(h to (hj"hhhNhNubjv)}(h**v**h]hv}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"ubj6)}(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.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"ubj6)}(h **Return**h]jv)}(hj#h]hReturn}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"ubj6)}(hNothing.h]hNothing.}(hj+#hj)#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjV"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_dec_return (C function)c.raw_atomic_long_dec_returnhNtauh1hhjIhhhNhNubh)}(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}(hhhjX#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjg#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjT#hhhjf#hMubh)}(hraw_atomic_long_dec_returnh]h)}(hraw_atomic_long_dec_returnh]hraw_atomic_long_dec_return}(hhhjy#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjT#hhhjf#hMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj#modnameN classnameNjajd)}jg]jj)}j]j{#sbc.raw_atomic_long_dec_returnasbuh1hhj#ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj~)}(hjh]h*}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#ubh)}(hj h]hv}(hhhj#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#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjP#hhhjf#hMubah}(h]jK#ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjM#hhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhjM#hhhjf#hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj!$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj@$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.hhMhj8$ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjY$hjW$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjS$hMhjT$ubah}(h]h ]h"]h$]h&]uh1jhj8$ubeh}(h]h ]h"]h$]h&]uh1jhjS$hMhj5$ubah}(h]h ]h"]h$]h&]uh1jhj$ubj6)}(h**Description**h]jv)}(hjy$h]h Description}(hhhj{$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw$ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hj$hhhNhNubjv)}(h**v**h]hv}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh to (}(h to (hj$hhhNhNubjv)}(h**v**h]hv}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh - 1) with full ordering.}(h - 1) with full ordering.hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubj6)}(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.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubj6)}(h **Return**h]jv)}(hj$h]hReturn}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj$hhhNhNubjv)}(h**v**h]hv}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh.}(hjPhj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_acquire (C function)$c.raw_atomic_long_dec_return_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj.%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj=%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*%hhhj<%hMubh)}(h"raw_atomic_long_dec_return_acquireh]h)}(h"raw_atomic_long_dec_return_acquireh]h"raw_atomic_long_dec_return_acquire}(hhhjO%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK%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}(hhhjn%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk%ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjp%modnameN classnameNjajd)}jg]jj)}j]jQ%sb$c.raw_atomic_long_dec_return_acquireasbuh1hhjg%ubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjg%ubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjg%ubh)}(hj h]hv}(hhhj%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<%hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&%hhhj<%hMubah}(h]j!%ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#%hhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j%j3j%j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj%h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj&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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/&hj-&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)&hMhj*&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj)&hMhj &ubah}(h]h ]h"]h$]h&]uh1jhj%ubj6)}(h**Description**h]jv)}(hjO&h]h Description}(hhhjQ&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM&ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hje&hhhNhNubjv)}(h**v**h]hv}(hhhjn&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje&ubh to (}(h to (hje&hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje&ubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hje&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubj6)}(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.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubj6)}(h **Return**h]jv)}(hj&h]hReturn}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj&hhhNhNubjv)}(h**v**h]hv}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh.}(hjPhj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_release (C function)$c.raw_atomic_long_dec_return_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj'hhhj'hMubh)}(h"raw_atomic_long_dec_return_releaseh]h)}(h"raw_atomic_long_dec_return_releaseh]h"raw_atomic_long_dec_return_release}(hhhj%'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}(hhhjD'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA'ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjF'modnameN classnameNjajd)}jg]jj)}j]j''sb$c.raw_atomic_long_dec_return_releaseasbuh1hhj='ubj9)}(h h]h }(hhhjd'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj='ubj~)}(hjh]h*}(hhhjr'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj='ubh)}(hj h]hv}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj='ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj9'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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&hhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j'j3j'j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj'h]h Parameters}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj'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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h**Description**h]jv)}(hj%(h]h Description}(hhhj'(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#(ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubj6)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hj;(hhhNhNubjv)}(h**v**h]hv}(hhhjD(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;(ubh to (}(h to (hj;(hhhNhNubjv)}(h**v**h]hv}(hhhjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;(ubh - 1) with release ordering.}(h - 1) with release ordering.hj;(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubj6)}(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.}(hjs(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hj(hhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh.}(hjPhj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_relaxed (C function)$c.raw_atomic_long_dec_return_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(hhhj(hMubh)}(h"raw_atomic_long_dec_return_relaxedh]h)}(h"raw_atomic_long_dec_return_relaxedh]h"raw_atomic_long_dec_return_relaxed}(hhhj(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}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj)modnameN classnameNjajd)}jg]jj)}j]j(sb$c.raw_atomic_long_dec_return_relaxedasbuh1hhj)ubj9)}(h h]h }(hhhj:)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhjH)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(hj h]hv}(hhhjU)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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj(hhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j)j3j)j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj)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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h**Description**h]jv)}(hj)h]h Description}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj)ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj*hhhNhNubjv)}(h**v**h]hv}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh to (}(h to (hj*hhhNhNubjv)}(h**v**h]hv}(hhhj-*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj)ubj6)}(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.}(hjI*hjG*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj)ubj6)}(h **Return**h]jv)}(hjX*h]hReturn}(hhhjZ*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjV*ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj)ubj6)}(hThe updated value of **v**.h](hThe updated value of }(hThe updated value of hjn*hhhNhNubjv)}(h**v**h]hv}(hhhjw*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn*ubh.}(hjPhjn*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_dec (C function)c.raw_atomic_long_fetch_dechNtauh1hhjIhhhNhNubh)}(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}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*hhhj*hMubh)}(hraw_atomic_long_fetch_dech]h)}(hraw_atomic_long_fetch_dech]hraw_atomic_long_fetch_dec}(hhhj*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}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]jj)}j]j*sbc.raw_atomic_long_fetch_decasbuh1hhj*ubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj*ubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubh)}(hj h]hv}(hhhj++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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj*hhubj)}(hhh]j6)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjW+hjU+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjR+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jm+j3jm+j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjw+h]h Parameters}(hhhjy+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhju+ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+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}(hhhj+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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjq+ubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+ubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hj+hhhNhNubjv)}(h**v**h]hv}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh to (}(h to (hj+hhhNhNubjv)}(h**v**h]hv}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh - 1) with full ordering.}(h - 1) with full ordering.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+ubj6)}(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,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+ubj6)}(h **Return**h]jv)}(hj.,h]hReturn}(hhhj0,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,,ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjD,hhhNhNubjv)}(h**v**h]hv}(hhhjM,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjD,ubh.}(hjPhjD,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjq+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_acquire (C function)#c.raw_atomic_long_fetch_dec_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,hhhj,hMubh)}(h!raw_atomic_long_fetch_dec_acquireh]h)}(h!raw_atomic_long_fetch_dec_acquireh]h!raw_atomic_long_fetch_dec_acquire}(hhhj,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}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj,modnameN classnameNjajd)}jg]jj)}j]j,sb#c.raw_atomic_long_fetch_dec_acquireasbuh1hhj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hj h]hv}(hhhj-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]jy,ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj{,hhubj)}(hhh]j6)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj--hj+-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jC-j3jC-j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjM-h]h Parameters}(hhhjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjK-ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjl-h]hatomic_long_t *v}(hhhjn-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjj-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjf-ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjf-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjc-ubah}(h]h ]h"]h$]h&]uh1jhjG-ubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubj6)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hAtomically updates hj-hhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh to (}(h to (hj-hhhNhNubjv)}(h**v**h]hv}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh - 1) with acquire ordering.}(h - 1) with acquire ordering.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubj6)}(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-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubj6)}(h **Return**h]jv)}(hj.h]hReturn}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj.hhhNhNubjv)}(h**v**h]hv}(hhhj#.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh.}(hjPhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjG-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_release (C function)#c.raw_atomic_long_fetch_dec_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj\.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&ubj9)}(h h]h }(hhhjk.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjX.hhhjj.hM&ubh)}(h!raw_atomic_long_fetch_dec_releaseh]h)}(h!raw_atomic_long_fetch_dec_releaseh]h!raw_atomic_long_fetch_dec_release}(hhhj}.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjX.hhhjj.hM&ubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj.modnameN classnameNjajd)}jg]jj)}j]j.sb#c.raw_atomic_long_fetch_dec_releaseasbuh1hhj.ubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj.ubah}(h]h ]h"]h$]h&]jj uh1jhjX.hhhjj.hM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjT.hhhjj.hM&ubah}(h]jO.ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM.hjQ.hhubj)}(hhh]j6)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj.hhubah}(h]h ]h"]h$]h&]uh1jhjQ.hhhjj.hM&ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj#/h]h Parameters}(hhhj%/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!/ubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hjB/h]hatomic_long_t *v}(hhhjD/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&hjAtomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hAtomically updates hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh to (}(h to (hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh - 1) with release ordering.}(h - 1) with release ordering.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hj/ubj6)}(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/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hj/ubj6)}(h **Return**h]jv)}(hj/h]hReturn}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj/ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj/hhhNhNubjv)}(h**v**h]hv}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh.}(hjPhj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_relaxed (C function)#c.raw_atomic_long_fetch_dec_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj20hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.0hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:ubj9)}(h h]h }(hhhjA0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.0hhhj@0hM:ubh)}(h!raw_atomic_long_fetch_dec_relaxedh]h)}(h!raw_atomic_long_fetch_dec_relaxedh]h!raw_atomic_long_fetch_dec_relaxed}(hhhjS0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.0hhhj@0hM:ubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjr0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo0ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjt0modnameN classnameNjajd)}jg]jj)}j]jU0sb#c.raw_atomic_long_fetch_dec_relaxedasbuh1hhjk0ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjk0ubj~)}(hjh]h*}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjk0ubh)}(hj h]hv}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjg0ubah}(h]h ]h"]h$]h&]jj uh1jhj.0hhhj@0hM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*0hhhj@0hM:ubah}(h]j%0ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj'0hhubj)}(hhh]j6)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj0hhubah}(h]h ]h"]h$]h&]uh1jhj'0hhhj@0hM:ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j0j3j0j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hj0ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj1h]hatomic_long_t *v}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hj1ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj31hj11hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-1hM:hj.1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj-1hM:hj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubj6)}(h**Description**h]jv)}(hjS1h]h Description}(hhhjU1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQ1ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj0ubj6)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hAtomically updates hji1hhhNhNubjv)}(h**v**h]hv}(hhhjr1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhji1ubh to (}(h to (hji1hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhji1ubh - 1) with relaxed ordering.}(h - 1) with relaxed ordering.hji1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj0ubj6)}(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.}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hj0ubj6)}(h **Return**h]jv)}(hj1h]hReturn}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hj0ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj1hhhNhNubjv)}(h**v**h]hv}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh.}(hjPhj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_and (C function)c.raw_atomic_long_andhNtauh1hhjIhhhNhNubh)}(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}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj2hhhj2hMNubh)}(hraw_atomic_long_andh]h)}(hraw_atomic_long_andh]hraw_atomic_long_and}(hhhj)2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhj2hMNubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjE2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA2ubj9)}(h h]h }(hhhjS2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjA2ubh)}(hj\h]hi}(hhhja2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj=2ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj|2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~2modnameN classnameNjajd)}jg]jj)}j]j+2sbc.raw_atomic_long_andasbuh1hhju2ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hju2ubj~)}(hjh]h*}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hju2ubh)}(hj h]hv}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj=2ubeh}(h]h ]h"]h$]h&]jj uh1jhj2hhhj2hMNubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhj2hMNubah}(h]j1ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhj1hhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj2hMNubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2j3j2j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj2ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hj"3h]hlong i}(hhhj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj 3ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj3ubj)}(hhh]j6)}(h long valueh]h long value}(hj=3hj;3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj73hMNhj83ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj73hMNhj3ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj[3h]hatomic_long_t *v}(hhhj]3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjY3ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjU3ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjv3hjt3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjp3hMOhjq3ubah}(h]h ]h"]h$]h&]uh1jhjU3ubeh}(h]h ]h"]h$]h&]uh1jhjp3hMOhj3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hj3h]h Description}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj2ubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj3hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh to (}(h to (hj3hhhNhNubjv)}(h**v**h]hv}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh & }(h & hj3hhhNhNubjv)}(h**i**h]hi}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh) with relaxed ordering.}(h) with relaxed ordering.hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj2ubj6)}(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.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShj2ubj6)}(h **Return**h]jv)}(hj4h]hReturn}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhj2ubj6)}(hNothing.h]hNothing.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_and (C function)c.raw_atomic_long_fetch_andhNtauh1hhjIhhhNhNubh)}(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}(hhhjK4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG4hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMcubj9)}(h h]h }(hhhjZ4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjG4hhhjY4hMcubh)}(hraw_atomic_long_fetch_andh]h)}(hraw_atomic_long_fetch_andh]hraw_atomic_long_fetch_and}(hhhjl4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjG4hhhjY4hMcubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hj\h]hi}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj4modnameN classnameNjajd)}jg]jj)}j]jn4sbc.raw_atomic_long_fetch_andasbuh1hhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubj~)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4ubh)}(hj h]hv}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubeh}(h]h ]h"]h$]h&]jj uh1jhjG4hhhjY4hMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjC4hhhjY4hMcubah}(h]j>4ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhj@4hhubj)}(hhh]j6)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hj&5hj$5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj!5hhubah}(h]h ]h"]h$]h&]uh1jhj@4hhhjY4hMcubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j<5j3j<5j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjF5h]h Parameters}(hhhjH5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjD5ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj@5ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hje5h]hlong i}(hhhjg5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjc5ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj_5ubj)}(hhh]j6)}(h long valueh]h long value}(hj5hj~5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjz5hMchj{5ubah}(h]h ]h"]h$]h&]uh1jhj_5ubeh}(h]h ]h"]h$]h&]uh1jhjz5hMchj\5ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj5h]hatomic_long_t *v}(hhhj5hhhNhNubah}(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.hhMdhj5ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMdhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMdhj\5ubeh}(h]h ]h"]h$]h&]uh1jhj@5ubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj@5ubj6)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj5hhhNhNubjv)}(h**v**h]hv}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh to (}(h to (hj5hhhNhNubjv)}(h**v**h]hv}(hhhj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh & }(h & hj5hhhNhNubjv)}(h**i**h]hi}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubh) with full ordering.}(h) with full ordering.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj@5ubj6)}(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:6hj86hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhj@5ubj6)}(h **Return**h]jv)}(hjI6h]hReturn}(hhhjK6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG6ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhj@5ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj_6hhhNhNubjv)}(h**v**h]hv}(hhhjh6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_6ubh.}(hjPhj_6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhj@5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_acquire (C function)#c.raw_atomic_long_fetch_and_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6hhhj6hMxubh)}(h!raw_atomic_long_fetch_and_acquireh]h)}(h!raw_atomic_long_fetch_and_acquireh]h!raw_atomic_long_fetch_and_acquire}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhj6hMxubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6ubh)}(hj\h]hi}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]jj)}j]j6sb#c.raw_atomic_long_fetch_and_acquireasbuh1hhj7ubj9)}(h h]h }(hhhj57hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7ubj~)}(hjh]h*}(hhhjC7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7ubh)}(hj h]hv}(hhhjP7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj6ubeh}(h]h ]h"]h$]h&]jj uh1jhj6hhhj6hMxubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMxubah}(h]j6ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6hhubj)}(hhh]j6)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj|7hjz7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjw7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj7ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hj7h]hlong i}(hhhj7hhhNhNubah}(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.hhMxhj7ubj)}(hhh]j6)}(h long valueh]h long value}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMxhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMxhj7ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj7h]hatomic_long_t *v}(hhhj7hhhNhNubah}(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.hhMyhj7ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 8hMyhj 8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj 8hMyhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hj/8h]h Description}(hhhj18hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-8ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj7ubj6)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hjE8hhhNhNubjv)}(h**v**h]hv}(hhhjN8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjE8ubh to (}(h to (hjE8hhhNhNubjv)}(h**v**h]hv}(hhhja8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjE8ubh & }(h & hjE8hhhNhNubjv)}(h**i**h]hi}(hhhjt8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjE8ubh) with acquire ordering.}(h) with acquire ordering.hjE8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj7ubj6)}(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.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hj7ubj6)}(h **Return**h]jv)}(hj8h]hReturn}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj8hhhNhNubjv)}(h**v**h]hv}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubh.}(hjPhj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_release (C function)#c.raw_atomic_long_fetch_and_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj8hhhj9hMubh)}(h!raw_atomic_long_fetch_and_releaseh]h)}(h!raw_atomic_long_fetch_and_releaseh]h!raw_atomic_long_fetch_and_release}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhj9hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj49hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj09ubj9)}(h h]h }(hhhjB9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj09ubh)}(hj\h]hi}(hhhjP9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj09ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,9ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjk9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh9ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjm9modnameN classnameNjajd)}jg]jj)}j]j9sb#c.raw_atomic_long_fetch_and_releaseasbuh1hhjd9ubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjd9ubj~)}(hjh]h*}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjd9ubh)}(hj h]hv}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjd9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj,9ubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhj9hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhj9hMubah}(h]j8ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8hhubj)}(hhh]j6)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj9hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j9j3j9j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hj:h]hlong i}(hhhj: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]j6)}(h long valueh]h long value}(hj,:hj*:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&: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<)}(hjJ:h]hatomic_long_t *v}(hhhjL: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.hhMhjD:ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hje:hjc:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_:hMhj`:ubah}(h]h ]h"]h$]h&]uh1jhjD:ubeh}(h]h ]h"]h$]h&]uh1jhj_:hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj9ubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj6)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj:hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh to (}(h to (hj:hhhNhNubjv)}(h**v**h]hv}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh & }(h & hj:hhhNhNubjv)}(h**i**h]hi}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh) with release ordering.}(h) with release ordering.hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj6)}(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.}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj6)}(h **Return**h]jv)}(hj:h]hReturn}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj ;hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ;ubh.}(hjPhj ;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_relaxed (C function)#c.raw_atomic_long_fetch_and_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjM;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI;hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj\;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjI;hhhj[;hMubh)}(h!raw_atomic_long_fetch_and_relaxedh]h)}(h!raw_atomic_long_fetch_and_relaxedh]h!raw_atomic_long_fetch_and_relaxed}(hhhjn;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjI;hhhj[;hMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj;ubh)}(hj\h]hi}(hhhj;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}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj;modnameN classnameNjajd)}jg]jj)}j]jp;sb#c.raw_atomic_long_fetch_and_relaxedasbuh1hhj;ubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj;ubj~)}(hjh]h*}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj;ubh)}(hj h]hv}(hhhj;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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB;hhubj)}(hhh]j6)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj(<hj&<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#<hhubah}(h]h ]h"]h$]h&]uh1jhjB;hhhj[;hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j><j3j><j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjH<h]h Parameters}(hhhjJ<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF<ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjg<h]hlong i}(hhhji<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.hhMhja<ubj)}(hhh]j6)}(h long valueh]h long value}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|<hMhj}<ubah}(h]h ]h"]h$]h&]uh1jhja<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}(hhhj<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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj^<ubeh}(h]h ]h"]h$]h&]uh1jhjB<ubj6)}(h**Description**h]jv)}(hj<h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubj6)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj<hhhNhNubjv)}(h**v**h]hv}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh to (}(h to (hj<hhhNhNubjv)}(h**v**h]hv}(hhhj =hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh & }(h & hj<hhhNhNubjv)}(h**i**h]hi}(hhhj =hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh) with relaxed ordering.}(h) with relaxed ordering.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubj6)}(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.}(hj<=hj:=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubj6)}(h **Return**h]jv)}(hjK=h]hReturn}(hhhjM=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjI=ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hja=hhhNhNubjv)}(h**v**h]hv}(hhhjj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhja=ubh.}(hjPhja=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjB<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic_long_andnot (C function)c.raw_atomic_long_andnothNtauh1hhjIhhhNhNubh)}(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}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=hhhj=hMubh)}(hraw_atomic_long_andnoth]h)}(hraw_atomic_long_andnoth]hraw_atomic_long_andnot}(hhhj=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}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj=ubh)}(hj\h]hi}(hhhj=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}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>modnameN classnameNjajd)}jg]jj)}j]j=sbc.raw_atomic_long_andnotasbuh1hhj>ubj9)}(h h]h }(hhhj7>hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubj~)}(hjh]h*}(hhhjE>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj>ubh)}(hj h]hv}(hhhjR>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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj=hhubj)}(hhh]j6)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj~>hj|>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjy>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj=hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j>j3j>j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj>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]j6)}(h long valueh]h long value}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>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}(hhhj>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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj ?hMhj ?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj ?hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubj6)}(h**Description**h]jv)}(hj1?h]h Description}(hhhj3?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/?ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj>ubj6)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjG?hhhNhNubjv)}(h**v**h]hv}(hhhjP?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG?ubh to (}(h to (hjG?hhhNhNubjv)}(h**v**h]hv}(hhhjc?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG?ubh & }(h & hjG?hhhNhNubjv)}(h**~i**h]h~i}(hhhjv?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG?ubh) with relaxed ordering.}(h) with relaxed ordering.hjG?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj>ubj6)}(hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj>ubj6)}(h **Return**h]jv)}(hj?h]hReturn}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj>ubj6)}(hNothing.h]hNothing.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_fetch_andnot (C function)c.raw_atomic_long_fetch_andnothNtauh1hhjIhhhNhNubh)}(hhh](h)}(hIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Ihhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubj9)}(h h]h }(hhhjMIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj:IhhhjLIhM ubh)}(hraw_atomic_long_orh]h)}(hraw_atomic_long_orh]hraw_atomic_long_or}(hhhj_IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[Iubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:IhhhjLIhM ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhj{IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwIubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwIubh)}(hj\h]hi}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjsIubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjImodnameN classnameNjajd)}jg]jj)}j]jaIsbc.raw_atomic_long_orasbuh1hhjIubj9)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj~)}(hjh]h*}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubh)}(hj h]hv}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjsIubeh}(h]h ]h"]h$]h&]jj uh1jhj:IhhhjLIhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6IhhhjLIhM ubah}(h]j1Iah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj3Ihhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1jhj3IhhhjLIhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/Jj3j/Jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9Jh]h Parameters}(hhhj;JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7Jubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj3Jubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjXJh]hlong i}(hhhjZJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVJubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjRJubj)}(hhh]j6)}(h long valueh]h long value}(hjsJhjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmJhM hjnJubah}(h]h ]h"]h$]h&]uh1jhjRJubeh}(h]h ]h"]h$]h&]uh1jhjmJhM hjOJubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjJh]hatomic_long_t *v}(hhhjJhhhNhNubah}(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.hhM!hjJubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhM!hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM!hjOJubeh}(h]h ]h"]h$]h&]uh1jhj3Jubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj3Jubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjJhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh to (}(h to (hjJhhhNhNubjv)}(h**v**h]hv}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh | }(h | hjJhhhNhNubjv)}(h**i**h]hi}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh) with relaxed ordering.}(h) with relaxed ordering.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj3Jubj6)}(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-Khj+KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj3Jubj6)}(h **Return**h]jv)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:Kubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj3Jubj6)}(hNothing.h]hNothing.}(hjTKhjRKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj3Jubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic_long_fetch_or (C function)c.raw_atomic_long_fetch_orhNtauh1hhjIhhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Khhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj}KhhhjKhM5ubh)}(hraw_atomic_long_fetch_orh]h)}(hraw_atomic_long_fetch_orh]hraw_atomic_long_fetch_or}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}KhhhjKhM5ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubh)}(hj\h]hi}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjKubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jj)}j]jKsbc.raw_atomic_long_fetch_orasbuh1hhjKubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubj~)}(hjh]h*}(hhhj#LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjKubh)}(hj h]hv}(hhhj0LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjKubeh}(h]h ]h"]h$]h&]jj uh1jhj}KhhhjKhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyKhhhjKhM5ubah}(h]jtKah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hjvKhhubj)}(hhh]j6)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj\LhjZLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjWLhhubah}(h]h ]h"]h$]h&]uh1jhjvKhhhjKhM5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jrLj3jrLj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj|Lh]h Parameters}(hhhj~LhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzLubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjvLubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjLh]hlong i}(hhhjLhhhNhNubah}(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.hhM5hjLubj)}(hhh]j6)}(h long valueh]h long value}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM5hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM5hjLubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjLh]hatomic_long_t *v}(hhhjLhhhNhNubah}(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.hhM6hjLubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM6hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM6hjLubeh}(h]h ]h"]h$]h&]uh1jhjvLubj6)}(h**Description**h]jv)}(hjMh]h Description}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Mubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjvLubj6)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hAtomically updates hj%MhhhNhNubjv)}(h**v**h]hv}(hhhj.MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%Mubh to (}(h to (hj%MhhhNhNubjv)}(h**v**h]hv}(hhhjAMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%Mubh | }(h | hj%MhhhNhNubjv)}(h**i**h]hi}(hhhjTMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%Mubh) with full ordering.}(h) with full ordering.hj%MhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjvLubj6)}(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.}(hjpMhjnMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hjvLubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Mubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjvLubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjMhhhNhNubjv)}(h**v**h]hv}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh.}(hjPhjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjvLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_acquire (C function)"c.raw_atomic_long_fetch_or_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJubj9)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMhhhjMhMJubh)}(h raw_atomic_long_fetch_or_acquireh]h)}(h raw_atomic_long_fetch_or_acquireh]h raw_atomic_long_fetch_or_acquire}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhjMhMJubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(h h]h }(hhhj"NhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubh)}(hj\h]hi}(hhhj0NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj Nubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjKNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHNubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMNmodnameN classnameNjajd)}jg]jj)}j]jMsb"c.raw_atomic_long_fetch_or_acquireasbuh1hhjDNubj9)}(h h]h }(hhhjkNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjDNubj~)}(hjh]h*}(hhhjyNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDNubh)}(hj h]hv}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj Nubeh}(h]h ]h"]h$]h&]jj uh1jhjMhhhjMhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjMhMJubah}(h]jMah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjMhhubj)}(hhh]j6)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhMJubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjNh]h Parameters}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjNubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjNh]hlong i}(hhhjNhhhNhNubah}(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.hhMJhjNubj)}(hhh]j6)}(h long valueh]h long value}(hj Ohj OhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhMJhjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjOhMJhjNubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj*Oh]hatomic_long_t *v}(hhhj,OhhhNhNubah}(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.hhMKhj$Oubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEOhjCOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?OhMKhj@Oubah}(h]h ]h"]h$]h&]uh1jhj$Oubeh}(h]h ]h"]h$]h&]uh1jhj?OhMKhjNubeh}(h]h ]h"]h$]h&]uh1jhjNubj6)}(h**Description**h]jv)}(hjeOh]h Description}(hhhjgOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcOubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjNubj6)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj{OhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{Oubh to (}(h to (hj{OhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{Oubh | }(h | hj{OhhhNhNubjv)}(h**i**h]hi}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{Oubh) with acquire ordering.}(h) with acquire ordering.hj{OhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjNubj6)}(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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjNubj6)}(h **Return**h]jv)}(hjOh]hReturn}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjNubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjOhhhNhNubjv)}(h**v**h]hv}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh.}(hjPhjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_release (C function)"c.raw_atomic_long_fetch_or_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj-PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Phhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_ubj9)}(h h]h }(hhhjQubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjQh]hatomic_long_t *v}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj~Qubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjzQubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhM`hjQubah}(h]h ]h"]h$]h&]uh1jhjzQubeh}(h]h ]h"]h$]h&]uh1jhjQhM`hj>Qubeh}(h]h ]h"]h$]h&]uh1jhj"Qubj6)}(h**Description**h]jv)}(hjQh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj"Qubj6)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh to (}(h to (hjQhhhNhNubjv)}(h**v**h]hv}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh | }(h | hjQhhhNhNubjv)}(h**i**h]hi}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubh) with release ordering.}(h) with release ordering.hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj"Qubj6)}(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.}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhj"Qubj6)}(h **Return**h]jv)}(hj+Rh]hReturn}(hhhj-RhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)Rubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj"Qubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjARhhhNhNubjv)}(h**v**h]hv}(hhhjJRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjARubh.}(hjPhjARhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj"Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_relaxed (C function)"c.raw_atomic_long_fetch_or_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMtubj9)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRhhhjRhMtubh)}(h raw_atomic_long_fetch_or_relaxedh]h)}(h raw_atomic_long_fetch_or_relaxedh]h raw_atomic_long_fetch_or_relaxed}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjRhMtubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubh)}(hj\h]hi}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjRubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjRmodnameN classnameNjajd)}jg]jj)}j]jRsb"c.raw_atomic_long_fetch_or_relaxedasbuh1hhjRubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRubj~)}(hjh]h*}(hhhj%ShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRubh)}(hj h]hv}(hhhj2ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjRubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjRhMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{RhhhjRhMtubah}(h]jvRah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjxRhhubj)}(hhh]j6)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj^Shj\ShhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshjYShhubah}(h]h ]h"]h$]h&]uh1jhjxRhhhjRhMtubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtSj3jtSj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~Sh]h Parameters}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|Subah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjxSubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjSh]hlong i}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjSubj)}(hhh]j6)}(h long valueh]h long value}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMthjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMthjSubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjSh]hatomic_long_t *v}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjSubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMuhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMuhjSubeh}(h]h ]h"]h$]h&]uh1jhjxSubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjxSubj6)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj'ThhhNhNubjv)}(h**v**h]hv}(hhhj0ThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Tubh to (}(h to (hj'ThhhNhNubjv)}(h**v**h]hv}(hhhjCThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Tubh | }(h | hj'ThhhNhNubjv)}(h**i**h]hi}(hhhjVThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'Tubh) with relaxed ordering.}(h) with relaxed ordering.hj'ThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjxSubj6)}(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.}(hjrThjpThhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMyhjxSubj6)}(h **Return**h]jv)}(hjTh]hReturn}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjxSubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjThhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubh.}(hjPhjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjxSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_xor (C function)c.raw_atomic_long_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjThhhjThMubh)}(hraw_atomic_long_xorh]h)}(hraw_atomic_long_xorh]hraw_atomic_long_xor}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjThhhjTPhMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(h h]h }(hhhj$UhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubh)}(hj\h]hi}(hhhj2UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjMUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJUubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjOUmodnameN classnameNjajd)}jg]jj)}j]jTsbc.raw_atomic_long_xorasbuh1hhjFUubj9)}(h h]h }(hhhjmUhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFUubj~)}(hjh]h*}(hhhj{UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjFUubh)}(hj h]hv}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjUubeh}(h]h ]h"]h$]h&]jj uh1jhjThhhjThMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjThMubah}(h]jTah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjThhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjUhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUj3jUj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjUh]hlong i}(hhhjUhhhNhNubah}(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.hhMhjUubj)}(hhh]j6)}(h long valueh]h long value}(hjVhj VhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhj Vubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjUubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj,Vh]hatomic_long_t *v}(hhhj.VhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*Vubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&Vubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGVhjEVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAVhMhjBVubah}(h]h ]h"]h$]h&]uh1jhj&Vubeh}(h]h ]h"]h$]h&]uh1jhjAVhMhjUubeh}(h]h ]h"]h$]h&]uh1jhjUubj6)}(h**Description**h]jv)}(hjgVh]h Description}(hhhjiVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeVubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj}VhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Vubh to (}(h to (hj}VhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Vubh ^ }(h ^ hj}VhhhNhNubjv)}(h**i**h]hi}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Vubh) with relaxed ordering.}(h) with relaxed ordering.hj}VhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj6)}(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.}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj6)}(h **Return**h]jv)}(hjVh]hReturn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj6)}(hNothing.h]hNothing.}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_xor (C function)c.raw_atomic_long_fetch_xorhNtauh1hhjIhhhNhNubh)}(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}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj+WhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWhhhj*WhMubh)}(hraw_atomic_long_fetch_xorh]h)}(hraw_atomic_long_fetch_xorh]hraw_atomic_long_fetch_xor}(hhhj=WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9Wubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhj*WhMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjYWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUWubj9)}(h h]h }(hhhjgWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUWubh)}(hj\h]hi}(hhhjuWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQWubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjWmodnameN classnameNjajd)}jg]jj)}j]j?Wsbc.raw_atomic_long_fetch_xorasbuh1hhjWubj9)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWubj~)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjWubh)}(hj h]hv}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQWubeh}(h]h ]h"]h$]h&]jj uh1jhjWhhhj*WhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhj*WhMubah}(h]jWah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWhhubj)}(hhh]j6)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhj*WhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j Xj3j Xj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hj6Xh]hlong i}(hhhj8XhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4Xubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj0Xubj)}(hhh]j6)}(h long valueh]h long value}(hjQXhjOXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKXhMhjLXubah}(h]h ]h"]h$]h&]uh1jhj0Xubeh}(h]h ]h"]h$]h&]uh1jhjKXhMhj-Xubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjoXh]hatomic_long_t *v}(hhhjqXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiXubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjiXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj-Xubeh}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj6)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjXhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh to (}(h to (hjXhhhNhNubjv)}(h**v**h]hv}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh ^ }(h ^ hjXhhhNhNubjv)}(h**i**h]hi}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh) with full ordering.}(h) with full ordering.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj6)}(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.}(hj Yhj YhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj6)}(h **Return**h]jv)}(hjYh]hReturn}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj0YhhhNhNubjv)}(h**v**h]hv}(hhhj9YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0Yubh.}(hjPhj0YhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_acquire (C function)#c.raw_atomic_long_fetch_xor_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjrYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnYhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnYhhhjYhMubh)}(h!raw_atomic_long_fetch_xor_acquireh]h)}(h!raw_atomic_long_fetch_xor_acquireh]h!raw_atomic_long_fetch_xor_acquire}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnYhhhjYhMubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubh)}(hj\h]hi}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYmodnameN classnameNjajd)}jg]jj)}j]jYsb#c.raw_atomic_long_fetch_xor_acquireasbuh1hhjYubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjYubj~)}(hjh]h*}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubh)}(hj h]hv}(hhhj!ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjYubeh}(h]h ]h"]h$]h&]jj uh1jhjnYhhhjYhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjYhhhjYhMubah}(h]jeYah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgYhhubj)}(hhh]j6)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjMZhjKZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjHZhhubah}(h]h ]h"]h$]h&]uh1jhjgYhhhjYhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcZj3jcZj4uh1hhhhjIhNhNubjl)}(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_xor_acquire() elsewhere. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hjmZh]h Parameters}(hhhjoZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkZubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j<)}(hjZh]hlong i}(hhhjZhhhNhNubah}(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]j6)}(h long valueh]h long value}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjZubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjZh]hatomic_long_t *v}(hhhjZhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjZubeh}(h]h ]h"]h$]h&]uh1jhjgZubj6)}(h**Description**h]jv)}(hj[h]h Description}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj[hhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh to (}(h to (hj[hhhNhNubjv)}(h**v**h]hv}(hhhj2[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh ^ }(h ^ hj[hhhNhNubjv)}(h**i**h]hi}(hhhjE[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh) with acquire ordering.}(h) with acquire ordering.hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubj6)}(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.}(hja[hj_[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubj6)}(h **Return**h]jv)}(hjp[h]hReturn}(hhhjr[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjn[ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj[hhhNhNubjv)}(h**v**h]hv}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh.}(hjPhj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_release (C function)#c.raw_atomic_long_fetch_xor_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[hhhj[hMubh)}(h!raw_atomic_long_fetch_xor_releaseh]h)}(h!raw_atomic_long_fetch_xor_releaseh]h!raw_atomic_long_fetch_xor_release}(hhhj[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}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\ubh)}(hj\h]hi}(hhhj!\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}(hhhj<\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9\ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj>\modnameN classnameNjajd)}jg]jj)}j]j[sb#c.raw_atomic_long_fetch_xor_releaseasbuh1hhj5\ubj9)}(h h]h }(hhhj\\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5\ubj~)}(hjh]h*}(hhhjj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5\ubh)}(hj h]hv}(hhhjw\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5\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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[hhubj)}(hhh]j6)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j\j3j\j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj\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]j6)}(h long valueh]h long value}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\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}(hhhj]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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6]hj4]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0]hMhj1]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj0]hMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hjV]h]h Description}(hhhjX]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjT]ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj\ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hAtomically updates hjl]hhhNhNubjv)}(h**v**h]hv}(hhhju]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl]ubh to (}(h to (hjl]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl]ubh ^ }(h ^ hjl]hhhNhNubjv)}(h**i**h]hi}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjl]ubh) with release ordering.}(h) with release ordering.hjl]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj\ubj6)}(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.}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj\ubj6)}(h **Return**h]jv)}(hj]h]hReturn}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj\ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj]hhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh.}(hjPhj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_relaxed (C function)#c.raw_atomic_long_fetch_xor_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj-^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^hhhj,^hMubh)}(h!raw_atomic_long_fetch_xor_relaxedh]h)}(h!raw_atomic_long_fetch_xor_relaxedh]h!raw_atomic_long_fetch_xor_relaxed}(hhhj?^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}(hhhj[^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW^ubj9)}(h h]h }(hhhji^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW^ubh)}(hj\h]hi}(hhhjw^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS^ubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]jj)}j]jA^sb#c.raw_atomic_long_fetch_xor_relaxedasbuh1hhj^ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj^ubj~)}(hjh]h*}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^ubh)}(hj h]hv}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS^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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj^hhubj)}(hhh]j6)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j_j3j_j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_h]h Parameters}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj:_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]j6)}(h long valueh]h long value}(hjS_hjQ_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjM_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}(hhhjs_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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjk_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj/_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj6)}(h**Description**h]jv)}(hj_h]h Description}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubj6)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hj_hhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh to (}(h to (hj_hhhNhNubjv)}(h**v**h]hv}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh ^ }(h ^ hj_hhhNhNubjv)}(h**i**h]hi}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh) with relaxed ordering.}(h) with relaxed ordering.hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubj6)}(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.}(hj `hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj2`hhhNhNubjv)}(h**v**h]hv}(hhhj;`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2`ubh.}(hjPhj2`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_long_xchg (C function)c.raw_atomic_long_xchghNtauh1hhjIhhhNhNubh)}(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}(hhhjt`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp`hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjp`hhhj`hMubh)}(hraw_atomic_long_xchgh]h)}(hraw_atomic_long_xchgh]hraw_atomic_long_xchg}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp`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}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`modnameN classnameNjajd)}jg]jj)}j]j`sbc.raw_atomic_long_xchgasbuh1hhj`ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj`ubj~)}(hjh]h*}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj`ubh)}(hj h]hv}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(hnewh]hnew}(hhhj#ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhjp`hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl`hhhj`hMubah}(h]jg`ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhji`hhubj)}(hhh]j6)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjPahjNahhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjKahhubah}(h]h ]h"]h$]h&]uh1jhji`hhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jfaj3jfaj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjpah]h Parameters}(hhhjrahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnaubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubj)}(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}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjaubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjah]hlong new}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjaubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubeh}(h]h ]h"]h$]h&]uh1jhjjaubj6)}(h**Description**h]jv)}(hjbh]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubj6)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hAtomically updates hjbhhhNhNubjv)}(h**v**h]hv}(hhhj"bhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh to }(h to hjbhhhNhNubjv)}(h**new**h]hnew}(hhhj5bhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh with full ordering.}(h with full ordering.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubj6)}(hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.}(hjQbhjObhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubj6)}(h **Return**h]jv)}(hj`bh]hReturn}(hhhjbbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^bubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjvbhhhNhNubjv)}(h**v**h]hv}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvbubh.}(hjPhjvbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_acquire (C function)c.raw_atomic_long_xchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbhhhjbhMubh)}(hraw_atomic_long_xchg_acquireh]h)}(hraw_atomic_long_xchg_acquireh]hraw_atomic_long_xchg_acquire}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjbhMubj)}(h(atomic_long_t *v, long new)h](j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjbmodnameN classnameNjajd)}jg]jj)}j]jbsbc.raw_atomic_long_xchg_acquireasbuh1hhjbubj9)}(h h]h }(hhhjchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjbubj~)}(hjh]h*}(hhhj&chhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbubh)}(hj h]hv}(hhhj3chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjKchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGcubj9)}(h h]h }(hhhjYchhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGcubh)}(hnewh]hnew}(hhhjgchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGcubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjbubeh}(h]h ]h"]h$]h&]jj uh1jhjbhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjbhhubj)}(hhh]j6)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhjIhNhNubjl)}(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. Safe to use in noinstr code; prefer atomic_long_xchg_acquire() elsewhere. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hjch]h Parameters}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjcubj)}(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}(hhhjchhhNhNubah}(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.hhMhjcubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj dh]hlong new}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj dubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjdubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj'dhj%dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!dhMhj"dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj!dhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjcubj6)}(h**Description**h]jv)}(hjGdh]h Description}(hhhjIdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEdubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjcubj6)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hAtomically updates hj]dhhhNhNubjv)}(h**v**h]hv}(hhhjfdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]dubh to }(h to hj]dhhhNhNubjv)}(h**new**h]hnew}(hhhjydhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]dubh with acquire ordering.}(h with acquire ordering.hj]dhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjcubj6)}(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.}(hjdhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjcubj6)}(h **Return**h]jv)}(hjdh]hReturn}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjcubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjdhhhNhNubjv)}(h**v**h]hv}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh.}(hjPhjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_release (C function)c.raw_atomic_long_xchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj ehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdhhhj ehMubh)}(hraw_atomic_long_xchg_releaseh]h)}(hraw_atomic_long_xchg_releaseh]hraw_atomic_long_xchg_release}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhj ehMubj)}(h(atomic_long_t *v, long new)h](j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjemodnameN classnameNjajd)}jg]jj)}j]jesbc.raw_atomic_long_xchg_releaseasbuh1hhj5eubj9)}(h h]h }(hhhj\ehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5eubj~)}(hjh]h*}(hhhjjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5eubh)}(hj h]hv}(hhhjwehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5eubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1eubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjeubh)}(hnewh]hnew}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1eubeh}(h]h ]h"]h$]h&]jj uh1jhjdhhhj ehMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhj ehMubah}(h]jdah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hjdhhubj)}(hhh]j6)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj ehMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jej3jej4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubj)}(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}(hhhjfhhhNhNubah}(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.hhMhjfubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2fhj0fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,fhMhj-fubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhj,fhMhjfubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjPfh]hlong new}(hhhjRfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNfubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJfubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjkfhjifhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjefhMhjffubah}(h]h ]h"]h$]h&]uh1jhjJfubeh}(h]h ]h"]h$]h&]uh1jhjefhMhjfubeh}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubj6)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hAtomically updates hjfhhhNhNubjv)}(h**v**h]hv}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh to }(h to hjfhhhNhNubjv)}(h**new**h]hnew}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh with release ordering.}(h with release ordering.hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubj6)}(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.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hjeubj6)}(h **Return**h]jv)}(hjfh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjeubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjfhhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh.}(hjPhjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_relaxed (C function)c.raw_atomic_long_xchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj@ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:hubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj6hubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj[hh]hatomic_long_t *v}(hhhj]hhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYhubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hjUhubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjvhhjthhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphhM1hjqhubah}(h]h ]h"]h$]h&]uh1jhjUhubeh}(h]h ]h"]h$]h&]uh1jhjphhM1hjRhubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjhh]hlong new}(hhhjhhhhNhNubah}(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.hhM2hjhubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhM2hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhM2hjRhubeh}(h]h ]h"]h$]h&]uh1jhj6hubj6)}(h**Description**h]jv)}(hjhh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj6hubj6)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hAtomically updates hjhhhhNhNubjv)}(h**v**h]hv}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubh to }(h to hjhhhhNhNubjv)}(h**new**h]hnew}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubh with relaxed ordering.}(h with relaxed ordering.hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj6hubj6)}(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.}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hj6hubj6)}(h **Return**h]jv)}(hj,ih]hReturn}(hhhj.ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*iubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj6hubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjBihhhNhNubjv)}(h**v**h]hv}(hhhjKihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBiubh.}(hjPhjBihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj6hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_long_cmpxchg (C function)c.raw_atomic_long_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjihhhjihMFubh)}(hraw_atomic_long_cmpxchgh]h)}(hraw_atomic_long_cmpxchgh]hraw_atomic_long_cmpxchg}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjihMFubj)}(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}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjimodnameN classnameNjajd)}jg]jj)}j]jisbc.raw_atomic_long_cmpxchgasbuh1hhjiubj9)}(h h]h }(hhhjihhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjiubj~)}(hjh]h*}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjiubh)}(hj h]hv}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjiubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(h h]h }(hhhj%jhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubh)}(holdh]hold}(hhhj3jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjiubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjLjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHjubj9)}(h h]h }(hhhjZjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjHjubh)}(hnewh]hnew}(hhhjhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjiubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhjihMFubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|ihhhjihMFubah}(h]jwiah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjyihhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.h=hMEhjjhhubah}(h]h ]h"]h$]h&]uh1jhjyihhhjihMFubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jjj3jjj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjjh]hatomic_long_t *v}(hhhjjhhhNhNubah}(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.hhMFhjjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMFhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMFhjjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j<)}(hj kh]hlong old}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj kubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMGhjkubj)}(hhh]j6)}(hlong value to compare withh]hlong value to compare with}(hj(khj&khhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"khMGhj#kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj"khMGhjjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjFkh]hlong new}(hhhjHkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDkubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMHhj@kubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjakhj_khhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[khMHhj\kubah}(h]h ]h"]h$]h&]uh1jhj@kubeh}(h]h ]h"]h$]h&]uh1jhj[khMHhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubj6)}(h**Description**h]jv)}(hjkh]h Description}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjjubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjkhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh == }(h == hjkhhhNhNubjv)}(h**old**h]hold}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh), atomically updates }(h), atomically updates hjkhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh to }(h to hjkhhhNhNubjv)}(h**new**h]hnew}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjkhhhNhNubjv)}(h**v**h]hv}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjjubj6)}(hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjjubj6)}(h **Return**h]jv)}(hjlh]hReturn}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjjubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj-lhhhNhNubjv)}(h**v**h]hv}(hhhj6lhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-lubh.}(hjPhj-lhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_cmpxchg_acquire (C function)!c.raw_atomic_long_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjolhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjklhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]ubj9)}(h h]h }(hhhj~lhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjklhhhj}lhM]ubh)}(hraw_atomic_long_cmpxchg_acquireh]h)}(hraw_atomic_long_cmpxchg_acquireh]hraw_atomic_long_cmpxchg_acquire}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjklhhhj}lhM]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}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjlmodnameN classnameNjajd)}jg]jj)}j]jlsb!c.raw_atomic_long_cmpxchg_acquireasbuh1hhjlubj9)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubj~)}(hjh]h*}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlubh)}(hj h]hv}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjlubh)}(holdh]hold}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj7mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3mubj9)}(h h]h }(hhhjEmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3mubh)}(hnewh]hnew}(hhhjSmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3mubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjlubeh}(h]h ]h"]h$]h&]jj uh1jhjklhhhj}lhM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjglhhhj}lhM]ubah}(h]jblah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjdlhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjmhj~mhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\hj{mhhubah}(h]h ]h"]h$]h&]uh1jhjdlhhhj}lhM]ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmj3jmj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjmubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjmh]hatomic_long_t *v}(hhhjmhhhNhNubah}(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.hhM]hjmubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhM]hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM]hjmubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j<)}(hjmh]hlong old}(hhhjmhhhNhNubah}(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.hhM^hjmubj)}(hhh]j6)}(hlong value to compare withh]hlong value to compare with}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj nhM^hjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj nhM^hjmubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj1nh]hlong new}(hhhj3nhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/nubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hj+nubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjLnhjJnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFnhM_hjGnubah}(h]h ]h"]h$]h&]uh1jhj+nubeh}(h]h ]h"]h$]h&]uh1jhjFnhM_hjmubeh}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h**Description**h]jv)}(hjlnh]h Description}(hhhjnnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjnubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjmubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjnhhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh == }(h == hjnhhhNhNubjv)}(h**old**h]hold}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh), atomically updates }(h), atomically updates hjnhhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh to }(h to hjnhhhNhNubjv)}(h**new**h]hnew}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hjnhhhNhNubjv)}(h**v**h]hv}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjmubj6)}(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.}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjmubj6)}(h **Return**h]jv)}(hjoh]hReturn}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjmubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjohhhNhNubjv)}(h**v**h]hv}(hhhj!ohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubh.}(hjPhjohhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_cmpxchg_release (C function)!c.raw_atomic_long_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(hhh](h)}(hKlong raw_atomic_long_cmpxchg_release (atomic_long_t *v, long old, long new)h]h)}(hJlong raw_atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hhhjZohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVohhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMtubj9)}(h h]h }(hhhjiohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjVohhhjhohMtubh)}(hraw_atomic_long_cmpxchg_releaseh]h)}(hraw_atomic_long_cmpxchg_releaseh]hraw_atomic_long_cmpxchg_release}(hhhj{ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVohhhjhohMtubj)}(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}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]jj)}j]j}osb!c.raw_atomic_long_cmpxchg_releaseasbuh1hhjoubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubj~)}(hjh]h*}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjoubh)}(hj h]hv}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(h h]h }(hhhjohhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjoubh)}(holdh]hold}(hhhj phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj"phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(h h]h }(hhhj0phhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjpubh)}(hnewh]hnew}(hhhj>phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjoubeh}(h]h ]h"]h$]h&]jj uh1jhjVohhhjhohMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRohhhjhohMtubah}(h]jMoah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOohhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjkphjiphhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshjfphhubah}(h]h ]h"]h$]h&]uh1jhjOohhhjhohMtubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhjIhNhNubjl)}(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. Safe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hjph]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjpubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjph]hatomic_long_t *v}(hhhjphhhNhNubah}(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.hhMthjpubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMthjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMthjpubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j<)}(hjph]hlong old}(hhhjphhhNhNubah}(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.hhMuhjpubj)}(hhh]j6)}(hlong value to compare withh]hlong value to compare with}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMuhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMuhjpubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjqh]hlong new}(hhhjqhhhNhNubah}(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.hhMvhjqubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hj7qhj5qhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1qhMvhj2qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhj1qhMvhjpubeh}(h]h ]h"]h$]h&]uh1jhjpubj6)}(h**Description**h]jv)}(hjWqh]h Description}(hhhjYqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUqubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjpubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjmqhhhNhNubjv)}(h**v**h]hv}(hhhjvqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmqubh == }(h == hjmqhhhNhNubjv)}(h**old**h]hold}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmqubh), atomically updates }(h), atomically updates hjmqhhhNhNubjv)}(h**v**h]hv}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmqubh to }(h to hjmqhhhNhNubjv)}(h**new**h]hnew}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmqubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hjmqhhhNhNubjv)}(h**v**h]hv}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmqubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjmqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjpubj6)}(hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjpubj6)}(h **Return**h]jv)}(hjqh]hReturn}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjpubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjrhhhNhNubjv)}(h**v**h]hv}(hhhj rhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh.}(hjPhjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_cmpxchg_relaxed (C function)!c.raw_atomic_long_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(hhh](h)}(hKlong raw_atomic_long_cmpxchg_relaxed (atomic_long_t *v, long old, long new)h]h)}(hJlong raw_atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hhhjErhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjArhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjTrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjArhhhjSrhMubh)}(hraw_atomic_long_cmpxchg_relaxedh]h)}(hraw_atomic_long_cmpxchg_relaxedh]hraw_atomic_long_cmpxchg_relaxed}(hhhjfrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjArhhhjSrhMubj)}(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}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjrmodnameN classnameNjajd)}jg]jj)}j]jhrsb!c.raw_atomic_long_cmpxchg_relaxedasbuh1hhj~rubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~rubj~)}(hjh]h*}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~rubh)}(hj h]hv}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~rubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzrubj$)}(hlong oldh](j)}(hlongh]hlong}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubh)}(holdh]hold}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzrubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj subj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj subh)}(hnewh]hnew}(hhhj)shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj subeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjzrubeh}(h]h ]h"]h$]h&]jj uh1jhjArhhhjSrhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=rhhhjSrhMubah}(h]j8rah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:rhhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjVshjTshhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQshhubah}(h]h ]h"]h$]h&]uh1jhj:rhhhjSrhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jlsj3jlsj4uh1hhhhjIhNhNubjl)}(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. Safe to use in noinstr code; prefer atomic_long_cmpxchg_relaxed() elsewhere. **Return** The original value of **v**.h](j6)}(h**Parameters**h]jv)}(hjvsh]h Parameters}(hhhjxshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtsubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjsh]hatomic_long_t *v}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j<)}(hjsh]hlong old}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubj)}(hhh]j6)}(hlong value to compare withh]hlong value to compare with}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjth]hlong new}(hhhj thhhNhNubah}(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]j6)}(hlong value to assignh]hlong value to assign}(hj"thj thhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMhjsubeh}(h]h ]h"]h$]h&]uh1jhjpsubj6)}(h**Description**h]jv)}(hjBth]h Description}(hhhjDthhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@tubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubj6)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjXthhhNhNubjv)}(h**v**h]hv}(hhhjathhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXtubh == }(h == hjXthhhNhNubjv)}(h**old**h]hold}(hhhjtthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXtubh), atomically updates }(h), atomically updates hjXthhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXtubh to }(h to hjXthhhNhNubjv)}(h**new**h]hnew}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXtubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjXthhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXtubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjXthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubj6)}(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.}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubj6)}(h **Return**h]jv)}(hjth]hReturn}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hjthhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubh.}(hjPhjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjpsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_long_try_cmpxchg (C function)c.raw_atomic_long_try_cmpxchghNtauh1hhjIhhhNhNubh)}(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}(hhhj0uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,uhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj>uhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,uhhhj=uhMubh)}(hraw_atomic_long_try_cmpxchgh]h)}(hraw_atomic_long_try_cmpxchgh]hraw_atomic_long_try_cmpxchg}(hhhjPuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLuubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,uhhhj=uhMubj)}(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}(hhhjouhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjluubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjqumodnameN classnameNjajd)}jg]jj)}j]jRusbc.raw_atomic_long_try_cmpxchgasbuh1hhjhuubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhuubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhuubh)}(hj h]hv}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhuubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjduubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjuubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjuubh)}(holdh]hold}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjduubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjvubh)}(hnewh]hnew}(hhhj vhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjduubeh}(h]h ]h"]h$]h&]jj uh1jhj,uhhhj=uhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(uhhhj=uhMubah}(h]j#uah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%uhhubj)}(hhh]j6)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjMvhjKvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjHvhhubah}(h]h ]h"]h$]h&]uh1jhj%uhhhj=uhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcvj3jcvj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjmvh]h Parameters}(hhhjovhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkvubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubj)}(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}(hhhjvhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j<)}(hjvh]h long *old}(hhhjvhhhNhNubah}(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]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjvubah}(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<)}(hjvh]hlong new}(hhhjwhhhNhNubah}(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]j6)}(hlong value to assignh]hlong value to assign}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjgvubj6)}(h**Description**h]jv)}(hj9wh]h Description}(hhhj;whhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7wubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubj6)}(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 (}(hIf (hjOwhhhNhNubjv)}(h**v**h]hv}(hhhjXwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh == }(h == hjOwhhhNhNubjv)}(h**old**h]hold}(hhhjkwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh), atomically updates }(h), atomically updates hjOwhhhNhNubjv)}(h**v**h]hv}(hhhj~whhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh to }(h to hjOwhhhNhNubjv)}(h**new**h]hnew}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh with full ordering. Otherwise, }(h with full ordering. Otherwise, hjOwhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh is not modified, }(h is not modified, hjOwhhhNhNubjv)}(h**old**h]hold}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh$ is updated to the current value of }(h$ is updated to the current value of hjOwhhhNhNubjv)}(h**v**h]hv}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOwubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjOwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubj6)}(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.}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubj6)}(h **Return**h]jv)}(hjwh]hReturn}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj xubh if the exchange occured, }(h if the exchange occured, hj xhhhNhNubjv)}(h **false**h]hfalse}(hhhj"xhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj xubh otherwise.}(h otherwise.hj xhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_acquire (C function)%c.raw_atomic_long_try_cmpxchg_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhj\xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXxhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjXxhhhjixhMubh)}(h#raw_atomic_long_try_cmpxchg_acquireh]h)}(h#raw_atomic_long_try_cmpxchg_acquireh]h#raw_atomic_long_try_cmpxchg_acquire}(hhhj|xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXxhhhjixhMubj)}(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}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjxmodnameN classnameNjajd)}jg]jj)}j]j~xsb%c.raw_atomic_long_try_cmpxchg_acquireasbuh1hhjxubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxubj~)}(hjh]h*}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxubh)}(hj h]hv}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxubj~)}(hjh]h*}(hhhj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxubh)}(holdh]hold}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj0yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,yubj9)}(h h]h }(hhhj>yhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,yubh)}(hnewh]hnew}(hhhjLyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,yubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjxubeh}(h]h ]h"]h$]h&]jj uh1jhjXxhhhjixhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjTxhhhjixhMubah}(h]jOxah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQxhhubj)}(hhh]j6)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjyyhjwyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtyhhubah}(h]h ]h"]h$]h&]uh1jhjQxhhhjixhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5he/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<)}(hjyh]hatomic_long_t *v}(hhhjyhhhNhNubah}(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.hhMhjyubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjyubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j<)}(hjyh]h long *old}(hhhjyhhhNhNubah}(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.hhMhjyubj)}(hhh]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj zhj zhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjyubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hj*zh]hlong new}(hhhj,zhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj(zubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$zubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjEzhjCzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?zhMhj@zubah}(h]h ]h"]h$]h&]uh1jhj$zubeh}(h]h ]h"]h$]h&]uh1jhj?zhMhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjezh]h Description}(hhhjgzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjczubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj6)}(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 (}(hIf (hj{zhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh == }(h == hj{zhhhNhNubjv)}(h**old**h]hold}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh), atomically updates }(h), atomically updates hj{zhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh to }(h to hj{zhhhNhNubjv)}(h**new**h]hnew}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh# with acquire ordering. Otherwise, }(h# with acquire ordering. Otherwise, hj{zhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh is not modified, }(h is not modified, hj{zhhhNhNubjv)}(h**old**h]hold}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh$ is updated to the current value of }(h$ is updated to the current value of hj{zhhhNhNubjv)}(h**v**h]hv}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{zubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj{zhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj6)}(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.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj6)}(h **Return**h]jv)}(hj!{h]hReturn}(hhhj#{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj;{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7{ubh if the exchange occured, }(h if the exchange occured, hj7{hhhNhNubjv)}(h **false**h]hfalse}(hhhjN{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7{ubh otherwise.}(h otherwise.hj7{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_release (C function)%c.raw_atomic_long_try_cmpxchg_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{hhhj{hMubh)}(h#raw_atomic_long_try_cmpxchg_releaseh]h)}(h#raw_atomic_long_try_cmpxchg_releaseh]h#raw_atomic_long_try_cmpxchg_release}(hhhj{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}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{modnameN classnameNjajd)}jg]jj)}j]j{sb%c.raw_atomic_long_try_cmpxchg_releaseasbuh1hhj{ubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubj~)}(hjh]h*}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubh)}(hj h]hv}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(h h]h }(hhhj(|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj|ubj~)}(hjh]h*}(hhhj6|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj|ubh)}(holdh]hold}(hhhjC|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhj\|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX|ubj9)}(h h]h }(hhhjj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjX|ubh)}(hnewh]hnew}(hhhjx|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjX|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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj}{hhubj)}(hhh]j6)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2j|j3j|j4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj|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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|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}(hhhj}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]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj8}hj6}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2}hMhj3}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj2}hMhj|ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjV}h]hlong new}(hhhjX}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjT}ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjP}ubj)}(hhh]j6)}(hlong value to assignh]hlong value to assign}(hjq}hjo}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjk}hMhjl}ubah}(h]h ]h"]h$]h&]uh1jhjP}ubeh}(h]h ]h"]h$]h&]uh1jhjk}hMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hj}h]h Description}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(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 (}(hIf (hj}hhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh == }(h == hj}hhhNhNubjv)}(h**old**h]hold}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh), atomically updates }(h), atomically updates hj}hhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh to }(h to hj}hhhNhNubjv)}(h**new**h]hnew}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh# with release ordering. Otherwise, }(h# with release ordering. Otherwise, hj}hhhNhNubjv)}(h**v**h]hv}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh is not modified, }(h is not modified, hj}hhhNhNubjv)}(h**old**h]hold}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh$ is updated to the current value of }(h$ is updated to the current value of hj}hhhNhNubjv)}(h**v**h]hv}(hhhj"~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(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.}(hj>~hj<~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(h **Return**h]jv)}(hjM~h]hReturn}(hhhjO~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjK~ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjg~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjc~ubh if the exchange occured, }(h if the exchange occured, hjc~hhhNhNubjv)}(h **false**h]hfalse}(hhhjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjc~ubh otherwise.}(h otherwise.hjc~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_relaxed (C function)%c.raw_atomic_long_try_cmpxchg_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~hhhj~hMubh)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h#raw_atomic_long_try_cmpxchg_relaxed}(hhhj~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}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj~modnameN classnameNjajd)}jg]jj)}j]j~sb%c.raw_atomic_long_try_cmpxchg_relaxedasbuh1hhj~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj~ubj~)}(hjh]h*}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~ubh)}(hj h]hv}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj~ubj$)}(h long *oldh](j)}(hlongh]hlong}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(h h]h }(hhhjThhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjBubj~)}(hjh]h*}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjBubh)}(holdh]hold}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj~ubj$)}(hlong newh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hnewh]hnew}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj~hhubj)}(hhh]j6)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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 occured, **false** otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j<)}(hjIh]h long *old}(hhhjKhhhNhNubah}(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.hhMhjCubj)}(hhh]j6)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j<)}(hjh]hlong new}(hhhjhhhNhNubah}(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]j6)}(hlong value to assignh]hlong value to assign}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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 (}(hIf (hjӀhhhNhNubjv)}(h**v**h]hv}(hhhj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh == }(h == hjӀhhhNhNubjv)}(h**old**h]hold}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh), atomically updates }(h), atomically updates hjӀhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh to }(h to hjӀhhhNhNubjv)}(h**new**h]hnew}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh# with relaxed ordering. Otherwise, }(h# with relaxed ordering. Otherwise, hjӀhhhNhNubjv)}(h**v**h]hv}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh is not modified, }(h is not modified, hjӀhhhNhNubjv)}(h**old**h]hold}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh$ is updated to the current value of }(h$ is updated to the current value of hjӀhhhNhNubjv)}(h**v**h]hv}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӀubh#, and relaxed ordering is provided.}(h#, and relaxed ordering is provided.hjӀhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjyh]hReturn}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h6**true** if the exchange occured, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the exchange occured, }(h if the exchange occured, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_sub_and_test (C function)c.raw_atomic_long_sub_and_testhNtauh1hhjIhhhNhNubh)}(hhh](h)}(hhhhNhNubah}(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.hhMhj6ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjwh]h Description}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh - 1) with full ordering.}(h - 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjŅhjÅhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjԅh]hReturn}(hhhjօhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj҅ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_inc_and_test (C function)c.raw_atomic_long_inc_and_testhNtauh1hhjIhhhNhNubh)}(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}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+ubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJhhhj[hM+ubh)}(hraw_atomic_long_inc_and_testh]h)}(hraw_atomic_long_inc_and_testh]hraw_atomic_long_inc_and_test}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhj[hM+ubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jpsbc.raw_atomic_long_inc_and_testasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjȆhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhj[hM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhj[hM+ubah}(h]jAah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM3hjChhubj)}(hhh]j6)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj[hM+ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM.hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hj3h]hatomic_long_t *v}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhM+hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM+hj*ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjnh]h Description}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hjubj6)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + 1) with full ordering.}(h + 1) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM/hjubj6)}(h **Return**h]jv)}(hjˇh]hReturn}(hhhj͇hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjɇubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hjubj6)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is zero, }(h is zero, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_add_negative (C function)c.raw_atomic_long_add_negativehNtauh1hhjIhhhNhNubh)}(hhh](h)}(hhjhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjRhM?ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj?h]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj9ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hj^h]hlong i}(hhhj`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?hjXubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshM?hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM?hjUubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj6)}(h**Description**h]jv)}(hj҉h]h Description}(hhhjԉhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjЉubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj9ubj6)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hAtomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) with full ordering.}(h) with full ordering.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj9ubj6)}(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.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMDhj9ubj6)}(h **Return**h]jv)}(hjBh]hReturn}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj9ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh if the resulting value of }(h if the resulting value of hjXhhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh is negative, }(h is negative, hjXhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubh otherwise.}(h otherwise.hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_acquire (C function)&c.raw_atomic_long_add_negative_acquirehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMTubj9)}(h h]h }(hhhjʊhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjɊhMTubh)}(h$raw_atomic_long_add_negative_acquireh]h)}(h$raw_atomic_long_add_negative_acquireh]h$raw_atomic_long_add_negative_acquire}(hhhj܊hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj؊ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjɊhMTubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]jj)}j]jފsb&c.raw_atomic_long_add_negative_acquireasbuh1hhj(ubj9)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubj~)}(hjh]h*}(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(ubh)}(hj h]hv}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjɊhMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjɊhMTubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjhhubj)}(hhh]j6)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjɊhMTubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjՋh]hlong i}(hhhj׋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.hhMThjϋubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjϋubeh}(h]h ]h"]h$]h&]uh1jhjhMThj̋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}(hhhjhhhNhNubah}(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.hhMUhjubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hMUhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMUhj̋ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjIh]h Description}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hAtomically updates hj_hhhNhNubjv)}(h**v**h]hv}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh to (}(h to (hj_hhhNhNubjv)}(h**v**h]hv}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh + }(h + hj_hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubh) with acquire ordering.}(h) with acquire ordering.hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMYhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM[hjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjӌhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjόubh if the resulting value of }(h if the resulting value of hjόhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjόubh is negative, }(h is negative, hjόhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjόubh otherwise.}(h otherwise.hjόhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_release (C function)&c.raw_atomic_long_add_negative_releasehNtauh1hhjIhhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMiubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/hhhj@hMiubh)}(h$raw_atomic_long_add_negative_releaseh]h)}(h$raw_atomic_long_add_negative_releaseh]h$raw_atomic_long_add_negative_release}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj@hMiubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkubh)}(hj\h]hi}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jUsb&c.raw_atomic_long_add_negative_releaseasbuh1hhjubj9)}(h h]h }(hhhjƍhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjԍhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhj@hMiubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj@hMiubah}(h]j&ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMrhj(hhubj)}(hhh]j6)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj@hMiubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhj'ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j<)}(hjLh]hlong i}(hhhjNhhhNhNubah}(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.hhMihjFubj)}(hhh]j6)}(hlong value to addh]hlong value to add}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMihjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMihjCubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjh]hatomic_long_t *v}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjCubeh}(h]h ]h"]h$]h&]uh1jhj'ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhj'ubj6)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hAtomically updates hj֎hhhNhNubjv)}(h**v**h]hv}(hhhjߎhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֎ubh to (}(h to (hj֎hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֎ubh + }(h + hj֎hhhNhNubjv)}(h**i**h]hi}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֎ubh) with release ordering.}(h) with release ordering.hj֎hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhj'ubj6)}(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!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMnhj'ubj6)}(h **Return**h]jv)}(hj0h]hReturn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMphj'ubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh if the resulting value of }(h if the resulting value of hjFhhhNhNubjv)}(h**v**h]hv}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh is negative, }(h is negative, hjFhhhNhNubjv)}(h **false**h]hfalse}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubh otherwise.}(h otherwise.hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMphj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_relaxed (C function)&c.raw_atomic_long_add_negative_relaxedhNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM~ubh)}(h$raw_atomic_long_add_negative_relaxedh]h)}(h$raw_atomic_long_add_negative_relaxedh]h$raw_atomic_long_add_negative_relaxed}(hhhjʏhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƏubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM~ubj)}(h(long i, atomic_long_t *v)h](j$)}(hlong ih](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj\h]hi}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j̏sb&c.raw_atomic_long_add_negative_relaxedasbuh1hhjubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjXhhhNhNubah}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhjŐ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]j6)}(hlong value to addh]hlong value to add}(hjސhjܐhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjؐ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}(hhhjhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hAtomically updates hjMhhhNhNubjv)}(h**v**h]hv}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh to (}(h to (hjMhhhNhNubjv)}(h**v**h]hv}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh + }(h + hjMhhhNhNubjv)}(h**i**h]hi}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubh) with relaxed ordering.}(h) with relaxed ordering.hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if the resulting value of }(h if the resulting value of hjhhhNhNubjv)}(h**v**h]hv}(hhhjԑhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is negative, }(h is negative, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_add_unless (C function)"c.raw_atomic_long_fetch_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj/hMubh)}(h raw_atomic_long_fetch_add_unlessh]h)}(h raw_atomic_long_fetch_add_unlessh]h raw_atomic_long_fetch_add_unless}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(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}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjcmodnameN classnameNjajd)}jg]jj)}j]jDsb"c.raw_atomic_long_fetch_add_unlessasbuh1hhjZubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjZubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVubj$)}(hlong ah](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj’hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhjВhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVubj$)}(hlong uh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hjQh]hu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjVubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jFj3jFj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjoh]hatomic_long_t *v}(hhhjqhhhNhNubah}(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.hhMhjiubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j<)}(hjh]hlong a}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjÓhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j<)}(hjh]hlong u}(hhhjhhhNhNubah}(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]j6)}(hlong value to compare withh]hlong value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjۓubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj2hhhNhNubjv)}(h**v**h]hv}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh != }(h != hj2hhhNhNubjv)}(h**u**h]hu}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh), atomically updates }(h), atomically updates hj2hhhNhNubjv)}(h**v**h]hv}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh to (}(h to (hj2hhhNhNubjv)}(h**v**h]hv}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh + }(h + hj2hhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hj2hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj6)}(h **Return**h]jv)}(hjŔh]hReturn}(hhhjǔhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjÔubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj6)}(hThe original value of **v**.h](hThe original value of }(hThe original value of hj۔hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj۔ubh.}(hjPhj۔hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_add_unless (C function)3c.raw_atomic_long_add_unlesshNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj*hMubh)}(hraw_atomic_long_add_unlessh]h)}(hraw_atomic_long_add_unlessh]hraw_atomic_long_add_unless}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(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}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj^modnameN classnameNjajd)}jg]jj)}j]j?sbc.raw_atomic_long_add_unlessasbuh1hhjUubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjUubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQubj$)}(hlong ah](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hj&h]ha}(hhhj˕hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQubj$)}(hlong uh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߕubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjߕubh)}(hjQh]hu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߕubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjQubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj*hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj*hMubah}(h]jah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubj)}(hhh]j6)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/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&]j1j,j2jAj3jAj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjKh]h Parameters}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjjh]hatomic_long_t *v}(hhhjlhhhNhNubah}(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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j<)}(hjh]hlong a}(hhhjhhhNhNubah}(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]j6)}(hlong value to addh]hlong value to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j<)}(hjܖh]hlong u}(hhhjޖ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]j6)}(hlong value to compare withh]hlong value to compare with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֖ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubj6)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hj-hhhNhNubjv)}(h**v**h]hv}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh != }(h != hj-hhhNhNubjv)}(h**u**h]hu}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh), atomically updates }(h), atomically updates hj-hhhNhNubjv)}(h**v**h]hv}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh to (}(h to (hj-hhhNhNubjv)}(h**v**h]hv}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh + }(h + hj-hhhNhNubjv)}(h**a**h]ha}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh!) with full ordering. Otherwise, }(h!) with full ordering. Otherwise, hj-hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj—hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjڗhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֗ubh if }(h if hj֗hhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֗ubh was updated, }(h was updated, hj֗hhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֗ubh otherwise.}(h otherwise.hj֗hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_inc_not_zero (C function)c.raw_atomic_long_inc_not_zerohNtauh1hhjIhhhNhNubh)}(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}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj6hhhjGhMubh)}(hraw_atomic_long_inc_not_zeroh]h)}(hraw_atomic_long_inc_not_zeroh]hraw_atomic_long_inc_not_zero}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhjGhMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{modnameN classnameNjajd)}jg]jj)}j]j\sbc.raw_atomic_long_inc_not_zeroasbuh1hhjrubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjrubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjrubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjnubah}(h]h ]h"]h$]h&]jj uh1jhj6hhhjGhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhjGhMubah}(h]j-ah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/hhubj)}(hhh]j6)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhjޘhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjۘhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjGhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj!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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjphhhNhNubjv)}(h**v**h]hv}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh != 0), atomically updates }(h != 0), atomically updates hjphhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh to (}(h to (hjphhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjphhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjΙhj̙hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjݙh]hReturn}(hhhjߙhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjۙubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_inc_unless_negative (C function)%c.raw_atomic_long_inc_unless_negativehNtauh1hhjIhhhNhNubh)}(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}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjShhhjdhMubh)}(h#raw_atomic_long_inc_unless_negativeh]h)}(h#raw_atomic_long_inc_unless_negativeh]h#raw_atomic_long_inc_unless_negative}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjdhMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jysb%c.raw_atomic_long_inc_unless_negativeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjĚhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjњhhhNhNubah}(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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjLhhubj)}(hhh]j6)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/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}(hhhj>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.hhMhj6ubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjwh]h Description}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh >= 0), atomically updates }(h >= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% + 1) with full ordering. Otherwise, }(h% + 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjϛhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh if }(h if hjhhhNhNubjv)}(h**v**h]hv}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was updated, }(h was updated, hjhhhNhNubjv)}(h **false**h]hfalse}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_dec_unless_positive (C function)%c.raw_atomic_long_dec_unless_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjphhhjhMubh)}(h#raw_atomic_long_dec_unless_positiveh]h)}(h#raw_atomic_long_dec_unless_positiveh]h#raw_atomic_long_dec_unless_positive}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhMubj)}(h(atomic_long_t *v)h]j$)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb%c.raw_atomic_long_dec_unless_positiveasbuh1hhjubj9)}(h h]h }(hhhjӜhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hj h]hv}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhMubah}(h]jgah ](jjeh"]h$]h&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjihhubj)}(hhh]j6)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j0j3j0j4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj:h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj)}(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}(hhhj[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]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj6)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh <= 0), atomically updates }(h <= 0), atomically updates hjhhhNhNubjv)}(h**v**h]hv}(hhhjƝhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to (}(h to (hjhhhNhNubjv)}(h**v**h]hv}(hhhjٝhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj6)}(h3**true** if **v** was updated, **false** otherwise.h](jv)}(h**true**h]htrue}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh if }(h if hj-hhhNhNubjv)}(h**v**h]hv}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh was updated, }(h was updated, hj-hhhNhNubjv)}(h **false**h]hfalse}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh otherwise.}(h otherwise.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_dec_if_positive (C function)!c.raw_atomic_long_dec_if_positivehNtauh1hhjIhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hraw_atomic_long_dec_if_positiveh]h)}(hraw_atomic_long_dec_if_positiveh]hraw_atomic_long_dec_if_positive}(hhhjhhhNhNubah}(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}(hhhjўhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΞubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjӞmodnameN classnameNjajd)}jg]jj)}j]jsb!c.raw_atomic_long_dec_if_positiveasbuh1hhjʞubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjʞubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjʞubh)}(hj h]hv}(hhhj 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&]juh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjhhubj)}(hhh]j6)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhjIhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j<)}(hjwh]hatomic_long_t *v}(hhhjyhhhNhNubah}(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.hhMhjqubj)}(hhh]j6)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj6)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hIf (hjȟhhhNhNubjv)}(h**v**h]hv}(hhhjџhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȟubh > 0), atomically updates }(h > 0), atomically updates hjȟhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȟubh to (}(h to (hjȟhhhNhNubjv)}(h**v**h]hv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȟubh% - 1) with full ordering. Otherwise, }(h% - 1) with full ordering. Otherwise, hjȟhhhNhNubjv)}(h**v**h]hv}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjȟubh2 is not modified and relaxed ordering is provided.}(h2 is not modified and relaxed ordering is provided.hjȟhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj6)}(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.}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj6)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hThe old value of (hjKhhhNhNubjv)}(h**v**h]hv}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh - 1), regardless of whether }(h - 1), regardless of whether hjKhhhNhNubjv)}(h**v**h]hv}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh was updated.}(h was updated.hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjIhhhNhNubeh}(h]atomicsah ]h"]atomicsah$]h&]uh1hhhhhhhhK^ubh)}(hhh](h)}(hKernel objects manipulationh]hKernel objects manipulation}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKjubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_get_path (C function)c.kobject_get_pathhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKubj9)}(h h]h }(hhhjɠhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjȠhKubj~)}(hjh]h*}(hhhjנhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjȠhKubh)}(hkobject_get_pathh]h)}(hkobject_get_pathh]hkobject_get_path}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjȠhKubj)}(h,(const struct kobject *kobj, gfp_t gfp_mask)h](j$)}(hconst struct kobject *kobjh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj?modnameN classnameNjajd)}jg]jj)}j]jsbc.kobject_get_pathasbuh1hhjubj9)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jYc.kobject_get_pathasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hgfp_maskh]hgfp_mask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjȠhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjȠhKubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjhhubj)}(hhh]j6)}(h2Allocate memory and fill in the path for **kobj**.h](h)Allocate memory and fill in the path for }(h)Allocate memory and fill in the path for hjhhhNhNubjv)}(h**kobj**h]hkobj}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjPhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjȠhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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<)}(hj?h]hconst struct kobject *kobj}(hhhjAhhhNhNubah}(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.chKhj9ubj)}(hhh]j6)}(h1kobject in question, with which to build the pathh]h1kobject in question, with which to build the path}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhj6ubj)}(hA``gfp_t gfp_mask`` the allocation type used to allocate the path h](j)}(h``gfp_t gfp_mask``h]j<)}(hjxh]hgfp_t gfp_mask}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjvubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjrubj)}(hhh]j6)}(h-the allocation type used to allocate the pathh]h-the allocation type used to allocate the path}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj6)}(h:The newly allocated memory, caller must free with kfree().h]h:The newly allocated memory, caller must free with kfree().}(hjˢhjɢhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_set_name (C function)c.kobject_set_namehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM-ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM-ubh)}(hkobject_set_nameh]h)}(hkobject_set_nameh]hkobject_set_name}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM-ubj)}(h,(struct kobject *kobj, const char *fmt, ...)h](j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhj5hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj1ubj9)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjUmodnameN classnameNjajd)}jg]jj)}j]jsbc.kobject_set_nameasbuh1hhj1ubj9)}(h h]h }(hhhjshhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1ubh)}(hkobjh]hkobj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-ubj$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhj£hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjУhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjޣhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hfmth]hfmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj-ubj$)}(h...h]j~)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM4hjhhubj)}(hhh]j6)}(hSet the name of a kobject.h]hSet the name of a kobject.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM,hj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jFj3jFj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM0hjJubj)}(hhh](j)}(h;``struct kobject *kobj`` struct kobject to set the name of h](j)}(h``struct kobject *kobj``h]j<)}(hjoh]hstruct kobject *kobj}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM-hjiubj)}(hhh]j6)}(h!struct kobject to set the name ofh]h!struct kobject to set the name of}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjfubj)}(h9``const char *fmt`` format string used to build the name h](j)}(h``const char *fmt``h]j<)}(hjh]hconst char *fmt}(hhhjhhhNhNubah}(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]j6)}(h$format string used to build the nameh]h$format string used to build the name}(hjähjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjfubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(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.chM1hjۤubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjۤubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjfubeh}(h]h ]h"]h$]h&]uh1jhjJubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM3hjJubj6)}(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.}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM0hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_init (C function)c.kobject_inithNtauh1hhjhhhNhNubh)}(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}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMCubj9)}(h h]h }(hhhjphhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj]hhhjohMCubh)}(h kobject_inith]h)}(h kobject_inith]h kobject_init}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjohMCubj)}(h5(struct kobject *kobj, const struct kobj_type *ktype)h](j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kobject_initasbuh1hhjubj9)}(h h]h }(hhhjܥhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst struct kobj_type *ktypeh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj')}(hj*h]hstruct}(hhhj+hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(h kobj_typeh]h kobj_type}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjKmodnameN classnameNjajd)}jg]jإc.kobject_initasbuh1hhj ubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hktypeh]hktype}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj]hhhjohMCubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohMCubah}(h]jTah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMMhjVhhubj)}(hhh]j6)}(hInitialize a kobject structure.h]hInitialize a kobject structure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMCubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jŦj3jŦj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjϦh]h Parameters}(hhhjѦhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjͦubah}(h]h ]h"]h$]h&]uh1j5hP/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<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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.chMChjubj)}(hhh]j6)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]j<)}(hj'h]hconst struct kobj_type *ktype}(hhhj)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.chMDhj!ubj)}(hhh]j6)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMDhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMDhjubeh}(h]h ]h"]h$]h&]uh1jhjɦubj6)}(h**Description**h]jv)}(hjbh]h Description}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhjɦubj6)}(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.}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhjɦubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMIhjɦubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_add (C function) c.kobject_addhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM{ubj9)}(h h]h }(hhhjŧhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjħhM{ubh)}(h kobject_addh]h)}(h kobject_addh]h kobject_add}(hhhjקhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӧubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjħhM{ubj)}(hD(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j٧sb c.kobject_addasbuh1hhjubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct kobject *parenth](j')}(hj*h]hstruct}(hhhjehhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjaubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j- c.kobject_addasbuh1hhjaubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjaubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjaubh)}(hparenth]hparent}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhjըhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjѨubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjѨubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѨubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjѨubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjѨubh)}(hfmth]hfmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѨubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h...h]j~)}(hjh]h...}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubah}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubj)}(hhh]j6)}(hThe main kobject add function.h]hThe main kobject add function.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjħhM{ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhjhNhNubjl)}(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. **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. 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.h](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjxubj)}(hhh](j)}(h,``struct kobject *kobj`` the kobject to add h](j)}(h``struct kobject *kobj``h]j<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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]j6)}(hthe kobject to addh]hthe kobject to add}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(hA``struct kobject *parent`` pointer to the parent of the kobject. h](j)}(h``struct kobject *parent``h]j<)}(hj֩h]hstruct kobject *parent}(hhhjة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.chM|hjЩubj)}(hhh]j6)}(h%pointer to the parent of the kobject.h]h%pointer to the parent of the kobject.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjЩubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(h5``const char *fmt`` format to name the kobject with. h](j)}(h``const char *fmt``h]j<)}(hjh]hconst char *fmt}(hhhjhhhNhNubah}(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.chM}hj ubj)}(hhh]j6)}(h format to name the kobject with.h]h format to name the kobject with.}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hM}hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM}hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjHh]h...}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjBubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjxubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjxubj6)}(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 }(hIf hjhhhNhNubjv)}(h **parent**h]hparent}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is set, then the parent of the }(h is set, then the parent of the hjhhhNhNubjv)}(h**kobj**h]hkobj}(hhhjĪhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh will be set to it. If }(h will be set to it. If hjhhhNhNubjv)}(h **parent**h]hparent}(hhhjתhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh! is NULL, then the parent of the }(h! is NULL, then the parent of the hjhhhNhNubjv)}(h**kobj**h]hkobj}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjxubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjxubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjxubj)}(hhh]j)}(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. 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.h](j)}(h8If this function returns an error, kobject_put() must beh]h8If this function returns an error, kobject_put() must be}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj.ubj)}(hhh](j6)}(hcalled 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]hcalled 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.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjAubj6)}(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.}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjAubj6)}(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.}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjAubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kobject_init_and_add (C function)c.kobject_init_and_addhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkobject_init_and_addh]h)}(hkobject_init_and_addh]hkobject_init_and_add}(hhhjīhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjܫubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjܫubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jƫsbc.kobject_init_and_addasbuh1hhjܫubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjܫubj~)}(hjh]h*}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjܫubh)}(hkobjh]hkobj}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܫubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjثubj$)}(hconst struct kobj_type *ktypeh](j')}(hjn'h]hconst}(hhhjRhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjNubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubj')}(hj*h]hstruct}(hhhjmhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjNubj9)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubh)}(hhh]h)}(h kobj_typeh]h kobj_type}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kobject_init_and_addasbuh1hhjNubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNubh)}(hktypeh]hktype}(hhhjĬhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjثubj$)}(hstruct kobject *parenth](j')}(hj*h]hstruct}(hhhjݬhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj٬ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj٬ubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kobject_init_and_addasbuh1hhj٬ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj٬ubj~)}(hjh]h*}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj٬ubh)}(hparenth]hparent}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj٬ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjثubj$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhjMhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjIubj9)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj)}(hcharh]hchar}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubh)}(hfmth]hfmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjثubj$)}(h...h]j~)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubj)}(hhh]j6)}(hCInitialize a kobject structure and add it to the kobject hierarchy.h]hCInitialize a kobject structure and add it to the kobject hierarchy.}(hj֭hjԭhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]j<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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]j6)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]j<)}(hjNh]hconst struct kobj_type *ktype}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjHubj)}(hhh]j6)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubj)}(hB``struct kobject *parent`` pointer to the parent of this kobject. h](j)}(h``struct kobject *parent``h]j<)}(hjh]hstruct kobject *parent}(hhhjhhhNhNubah}(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]j6)}(h&pointer to the parent of this kobject.h]h&pointer to the parent of this kobject.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h-``const char *fmt`` the name of the kobject. h](j)}(h``const char *fmt``h]j<)}(hjh]hconst char *fmt}(hhhj®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]j6)}(hthe name of the kobject.h]hthe name of the kobject.}(hjۮhjٮhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjծhMhj֮ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjծhMhj ubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(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]j6)}(hvariable argumentsh]hvariable arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(hDThis function combines the call to kobject_init() and kobject_add().h]hDThis function combines the call to kobject_init() and kobject_add().}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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.}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_rename (C function)c.kobject_renamehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkobject_renameh]h)}(hkobject_renameh]hkobject_rename}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h,(struct kobject *kobj, const char *new_name)h](j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjůhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjүhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kobject_renameasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *new_nameh](j')}(hjn'h]hconst}(hhhj7hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj3ubj9)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubj)}(hcharh]hchar}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3ubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3ubh)}(hnew_nameh]hnew_name}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj}hhubj)}(hhh]j6)}(hChange the name of an object.h]hChange the name of an object.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjȰh]h Parameters}(hhhjʰhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjưubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj°ubj)}(hhh](j)}(h-``struct kobject *kobj`` object in question. h](j)}(h``struct kobject *kobj``h]j<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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]j6)}(hobject in question.h]hobject in question.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjްubj)}(h+``const char *new_name`` object's new name h](j)}(h``const char *new_name``h]j<)}(hj h]hconst char *new_name}(hhhj"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]j6)}(hobject's new nameh]hobject’s new name}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjްubeh}(h]h ]h"]h$]h&]uh1jhj°ubj6)}(h**Description**h]jv)}(hj[h]h Description}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj°ubj6)}(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.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj°ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_move (C function)c.kobject_movehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h kobject_moveh]h)}(h kobject_moveh]h kobject_move}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h2(struct kobject *kobj, struct kobject *new_parent)h](j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjݱhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjٱubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjٱubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jñsbc.kobject_moveasbuh1hhjٱubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjٱubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjٱubh)}(hkobjh]hkobj}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjٱubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjձubj$)}(hstruct kobject *new_parenth](j')}(hj*h]hstruct}(hhhjOhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjKubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjomodnameN classnameNjajd)}jg]jc.kobject_moveasbuh1hhjKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjKubh)}(h new_parenth]h new_parent}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubj)}(hhh]j6)}(hMove object to another parent.h]hMove object to another parent.}(hjӲhjѲhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h**Parameters** ``struct kobject *kobj`` object in question. ``struct kobject *new_parent`` object's new parent (can be NULL)h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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.chMhj ubj)}(hhh]j6)}(hobject in question.h]hobject in question.}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubj)}(h@``struct kobject *new_parent`` object's new parent (can be NULL)h](j)}(h``struct kobject *new_parent``h]j<)}(hjKh]hstruct kobject *new_parent}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjEubj)}(hhh]j6)}(h!object's new parent (can be NULL)h]h#object’s new parent (can be NULL)}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_del (C function) c.kobject_delhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void kobject_del (struct kobject *kobj)h]h)}(h&void kobject_del(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMfubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMfubh)}(h kobject_delh]h)}(h kobject_delh]h kobject_del}(hhhjƳhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj³ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMfubj)}(h(struct kobject *kobj)h]j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj޳ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj޳ubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jȳsb c.kobject_delasbuh1hhj޳ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj޳ubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj޳ubh)}(hkobjh]hkobj}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj޳ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjڳubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMfubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMfubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMkhjhhubj)}(hhh]j6)}(hUnlink kobject from hierarchy.h]hUnlink kobject from hierarchy.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMehjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMfubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMihjubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j<)}(hjh]hstruct kobject *kobj}(hhhjhhhNhNubah}(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]j6)}(hobject.h]hobject.}(hj´hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhhjubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_get (C function) c.kobject_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h3struct kobject * kobject_get (struct kobject *kobj)h]h)}(h1struct kobject *kobject_get(struct kobject *kobj)h](j')}(hj*h]hstruct}(hhhj'hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj4hMzubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjHmodnameN classnameNjajd)}jg]jj)}j] kobject_getsb c.kobject_getasbuh1hhj#hhhj4hMzubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#hhhj4hMzubj~)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#hhhj4hMzubh)}(h kobject_geth]h)}(hjdh]h kobject_get}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj4hMzubj)}(h(struct kobject *kobj)h]j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jb c.kobject_getasbuh1hhjubj9)}(h h]h }(hhhjݵhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj#hhhj4hMzubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMzubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM|hjhhubj)}(hhh]j6)}(hIncrement refcount for object.h]hIncrement refcount for object.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMzubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhjhNhNubjl)}(h2**Parameters** ``struct kobject *kobj`` object.h](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hj?ubj)}(hhh]j)}(h ``struct kobject *kobj`` object.h](j)}(h``struct kobject *kobj``h]j<)}(hjdh]hstruct kobject *kobj}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjbubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj^ubj)}(hhh]j6)}(hobject.h]hobject.}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_put (C function) c.kobject_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void kobject_put (struct kobject *kobj)h]h)}(h&void kobject_put(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjͶhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj̶hMubh)}(h kobject_puth]h)}(h kobject_puth]h kobject_put}(hhhj߶hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj۶ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj̶hMubj)}(h(struct kobject *kobj)h]j$)}(hstruct kobject *kobjh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.kobject_putasbuh1hhjubj9)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkobjh]hkobj}(hhhjThhhNhNubah}(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]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubj)}(hhh]j6)}(hDecrement refcount for object.h]hDecrement refcount for object.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̶hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h~**Parameters** ``struct kobject *kobj`` object. **Description** Decrement the refcount, and if 0, call kobject_cleanup().h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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}(hhhj·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]j6)}(hobject.h]hobject.}(hj۷hjٷhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjշhMhjַubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjշhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(h9Decrement the refcount, and if 0, call kobject_cleanup().h]h9Decrement the refcount, and if 0, call kobject_cleanup().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kobject_create_and_add (C function)c.kobject_create_and_addhNtauh1hhjhhhNhNubh)}(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}(hhhj@hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj<hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM ubj9)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhjMhM ubh)}(hhh]h)}(hkobjecth]hkobject}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjamodnameN classnameNjajd)}jg]jj)}j]kobject_create_and_addsbc.kobject_create_and_addasbuh1hhj<hhhjMhM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj<hhhjMhM ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj<hhhjMhM ubh)}(hkobject_create_and_addh]h)}(hj}h]hkobject_create_and_add}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjMhM ubj)}(h*(const char *name, struct kobject *parent)h](j$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjǸhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhjոhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hnameh]hname}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hstruct kobject *parenth](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkobjecth]hkobject}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj7modnameN classnameNjajd)}jg]j{c.kobject_create_and_addasbuh1hhjubj9)}(h h]h }(hhhjShhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hparenth]hparent}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhjMhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjMhM ubah}(h]j3ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj5hhubj)}(hhh]j6)}(h?Create a struct kobject dynamically and register it with sysfs.h]h?Create a struct kobject dynamically and register it with sysfs.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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}(hhhjܹ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.chM hjԹubj)}(hhh]j6)}(hthe name for the kobjecth]hthe name for the kobject}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjԹubeh}(h]h ]h"]h$]h&]uh1jhjhM hjѹubj)}(hG``struct kobject *parent`` the parent kobject of this kobject, if any. h](j)}(h``struct kobject *parent``h]j<)}(hjh]hstruct kobject *parent}(hhhjhhhNhNubah}(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]j6)}(h+the parent kobject of this kobject, if any.h]h+the parent kobject of this kobject, if any.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hM hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM hjѹubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjNh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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.}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_register (C function)c.kset_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int kset_register (struct kset *k)h]h)}(h!int kset_register(struct kset *k)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMTubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMTubh)}(h kset_registerh]h)}(h kset_registerh]h kset_register}(hhhjúhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMTubj)}(h(struct kset *k)h]j$)}(hstruct kset *kh](j')}(hj*h]hstruct}(hhhjߺhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjۺubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjۺubh)}(hhh]h)}(hkseth]hkset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jźsbc.kset_registerasbuh1hhjۺubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjۺubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjۺubh)}(hj3h]hk}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۺubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj׺ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMTubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMYhjhhubj)}(hhh]j6)}(hInitialize and add a kset.h]hInitialize and add a kset.}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMShj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMTubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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}(hhhjhhhNhNubah}(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]j6)}(hkset.h]hkset.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubah}(h]h ]h"]h$]h&]uh1jhj~ubj6)}(h**NOTE**h]jv)}(hj޻h]hNOTE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjܻubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhj~ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_unregister (C function)c.kset_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void kset_unregister (struct kset *k)h]h)}(h$void kset_unregister(struct kset *k)h](j)}(hvoidh]hvoid}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMtubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj1hMtubh)}(hkset_unregisterh]h)}(hkset_unregisterh]hkset_unregister}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj1hMtubj)}(h(struct kset *k)h]j$)}(hstruct kset *kh](j')}(hj*h]hstruct}(hhhj`hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj\ubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\ubh)}(hhh]h)}(hkseth]hkset}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jFsbc.kset_unregisterasbuh1hhj\ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj\ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\ubh)}(hj3h]hk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjXubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj1hMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hMtubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMvhjhhubj)}(hhh]j6)}(hRemove a kset.h]hRemove a kset.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMtubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(h***Parameters** ``struct kset *k`` kset.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMwhjubj)}(hhh]j)}(h``struct kset *k`` kset.h](j)}(h``struct kset *k``h]j<)}(hj$h]hstruct kset *k}(hhhj&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.chMyhjubj)}(hhh]j6)}(hkset.h]hkset.}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMthj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_find_obj (C function)c.kset_find_objhNtauh1hhjhhhNhNubh)}(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}(hhhj~hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjzhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzhhhjhMubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j] kset_find_objsbc.kset_find_objasbuh1hhjzhhhjhMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjzhhhjhMubj~)}(hjh]h*}(hhhj̽hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjzhhhjhMubh)}(h kset_find_objh]h)}(hjh]h kset_find_obj}(hhhjݽhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjٽubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjhMubj)}(h%(struct kset *kset, const char *name)h](j$)}(hstruct kset *kseth](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkseth]hkset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kset_find_objasbuh1hhjubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hkseth]hkset}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjhhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjdubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjdubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdubh)}(hnameh]hname}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(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&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjshhubj)}(hhh]j6)}(hSearch for object in kset.h]hSearch for object in kset.}(hjپhj׾hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjԾhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh](j)}(h-``struct kset *kset`` kset we're looking in. h](j)}(h``struct kset *kset``h]j<)}(hjh]hstruct kset *kset}(hhhjhhhNhNubah}(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]j6)}(hkset we're looking in.h]hkset we’re looking in.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(h$``const char *name`` object's name. h](j)}(h``const char *name``h]j<)}(hjQh]hconst char *name}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjKubj)}(hhh]j6)}(hobject's name.h]hobject’s name.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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 }(hLock kset via hjhhhNhNubjv)}(h**kset->subsys**h]h kset->subsys}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh, and iterate over }(h, and iterate over hjhhhNhNubjv)}(h**kset->list**h]h kset->list}(hhhjhhhNhNuba7h}(h]h ]h"]h$]h&]uh1juhjubhe, looking for a matching kobject. If matching object is found take a reference and return the object.}(he, looking for a matching kobject. If matching object is found take a reference and return the object.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kset_create_and_add (C function)c.kset_create_and_addhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hhh]h)}(hkseth]hkset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]kset_create_and_addsbc.kset_create_and_addasbuh1hhjhhhjhMubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhMubh)}(hkset_create_and_addh]h)}(hj5h]hkset_create_and_add}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hY(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjrhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjnubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjnubh)}(hnameh]hname}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(h(const struct kset_uevent_ops *uevent_opsh](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkset_uevent_opsh]hkset_uevent_ops}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]j3c.kset_create_and_addasbuh1hhjubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h uevent_opsh]h uevent_ops}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubj$)}(hstruct kobject *parent_kobjh](j')}(hj*h]hstruct}(hhhjZhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjVubj9)}(h h]h }(hhhjghhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjVubh)}(hhh]h)}(hkobjecth]hkobject}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjzmodnameN classnameNjajd)}jg]j3c.kset_create_and_addasbuh1hhjVubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjVubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjVubh)}(h parent_kobjh]h parent_kobj}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubj)}(hhh]j6)}(h5Create a struct kset dynamically and add it to sysfs.h]h5Create a struct kset dynamically and add it to sysfs.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh](j)}(h+``const char *name`` the name for the kset h](j)}(h``const char *name``h]j<)}(hjh]hconst char *name}(hhhjhhhNhNubah}(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]j6)}(hthe name for the kseth]hthe name for the kset}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(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<)}(hjVh]h(const struct kset_uevent_ops *uevent_ops}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjPubj)}(hhh]j6)}(h%a struct kset_uevent_ops for the kseth]h%a struct kset_uevent_ops for the kset}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubj)}(hI``struct kobject *parent_kobj`` the parent kobject of this kset, if any. h](j)}(h``struct kobject *parent_kobj``h]j<)}(hjh]hstruct kobject *parent_kobj}(hhhjhhhNhNubah}(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]j6)}(h(the parent kobject of this kset, if any.h]h(the parent kobject of this kset, if any.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubeh}(h]kernel-objects-manipulationah ]h"]kernel objects manipulationah$]h&]uh1hhhhhhhhKjubh)}(hhh](h)}(hKernel utility functionsh]hKernel utility functions}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKpubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmight_sleep (C macro) c.might_sleephNtauh1hhj hhhNhNubh)}(hhh](h)}(h might_sleeph]h)}(h might_sleeph]h)}(h might_sleeph]h)}(hj1h]h might_sleep}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKjubah}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjNhKjubah}(h]j*ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKihj,hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,hhhjNhKjubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhj hNhNubj6)}(h``might_sleep ()``h]j<)}(hjnh]hmight_sleep ()}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKkhj hhubjR)}(hhh]j6)}(h'annotation for functions that can sleeph]h'annotation for functions that can sleep}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhK^hjubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hX**Parameters** **Description** this macro will print a stack trace if it is executed in an atomic context (spinlock, irq-handler, ...). Additional sections where blocking is not allowed can be annotated with non_block_start() and non_block_end() pairs. This is a useful debugging help to be able to catch problems early and not be bitten later when the calling function happens to sleep when it is not supposed to.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKbhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKdhjubj6)}(hthis macro will print a stack trace if it is executed in an atomic context (spinlock, irq-handler, ...). Additional sections where blocking is not allowed can be annotated with non_block_start() and non_block_end() pairs.h]hthis macro will print a stack trace if it is executed in an atomic context (spinlock, irq-handler, ...). Additional sections where blocking is not allowed can be annotated with non_block_start() and non_block_end() pairs.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhK`hjubj6)}(hThis is a useful debugging help to be able to catch problems early and not be bitten later when the calling function happens to sleep when it is not supposed to.h]hThis is a useful debugging help to be able to catch problems early and not be bitten later when the calling function happens to sleep when it is not supposed to.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcant_sleep (C macro) c.cant_sleephNtauh1hhj hhhNhNubh)}(hhh](h)}(h cant_sleeph]h)}(h cant_sleeph]h)}(h cant_sleeph]h)}(hjh]h cant_sleep}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKqubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hKqubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKphjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj%hKqubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j?j3j?j4uh1hhhhj hNhNubj6)}(h``cant_sleep ()``h]j<)}(hjEh]h cant_sleep ()}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKrhj hhubjR)}(hhh]j6)}(h*annotation for functions that cannot sleeph]h*annotation for functions that cannot sleep}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKlhj[ubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(ho**Parameters** **Description** this macro will print a stack trace if it is executed with preemption enabledh](j6)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKphjsubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKrhjsubj6)}(hMthis macro will print a stack trace if it is executed with preemption enabledh]hMthis macro will print a stack trace if it is executed with preemption enabled}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKnhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcant_migrate (C macro)c.cant_migratehNtauh1hhj hhhNhNubh)}(hhh](h)}(h cant_migrateh]h)}(h cant_migrateh]h)}(h cant_migrateh]h)}(hjh]h cant_migrate}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKzubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKzubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKyhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKzubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubj6)}(h``cant_migrate ()``h]j<)}(hj h]hcant_migrate ()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhK{hj hhubjR)}(hhh]j6)}(h,annotation for functions that cannot migrateh]h,annotation for functions that cannot migrate}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKuhj#ubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hb**Parameters** **Description** Will print a stack trace if executed in code which is migratableh](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKyhj;ubj6)}(h**Description**h]jv)}(hjYh]h Description}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhK{hj;ubj6)}(h@Will print a stack trace if executed in code which is migratableh]h@Will print a stack trace if executed in code which is migratable}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKwhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnon_block_start (C macro)c.non_block_starthNtauh1hhj hhhNhNubh)}(hhh](h)}(hnon_block_starth]h)}(hnon_block_starth]h)}(hnon_block_starth]h)}(hjh]hnon_block_start}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubj6)}(h``non_block_start ()``h]j<)}(hjh]hnon_block_start ()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhj hhubjR)}(hhh]j6)}(h:annotate the start of section where sleeping is prohibitedh]h:annotate the start of section where sleeping is prohibited}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hX**Parameters** **Description** This is on behalf of the oom reaper, specifically when it is calling the mmu notifiers. The problem is that if the notifier were to block on, for example, mutex_lock() and if the process which holds that mutex were to perform a sleeping memory allocation, the oom reaper is now blocked on completion of that memory allocation. Other blocking calls like wait_event() pose similar issues.h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(h**Description**h]jv)}(hj!h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(hXThis is on behalf of the oom reaper, specifically when it is calling the mmu notifiers. The problem is that if the notifier were to block on, for example, mutex_lock() and if the process which holds that mutex were to perform a sleeping memory allocation, the oom reaper is now blocked on completion of that memory allocation. Other blocking calls like wait_event() pose similar issues.h]hXThis is on behalf of the oom reaper, specifically when it is calling the mmu notifiers. The problem is that if the notifier were to block on, for example, mutex_lock() and if the process which holds that mutex were to perform a sleeping memory allocation, the oom reaper is now blocked on completion of that memory allocation. Other blocking calls like wait_event() pose similar issues.}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnon_block_end (C macro)c.non_block_endhNtauh1hhj hhhNhNubh)}(hhh](h)}(h non_block_endh]h)}(h non_block_endh]h)}(h non_block_endh]h)}(hj`h]h non_block_end}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj}hKubah}(h]jYah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhj[hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj[hhhj}hKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubj6)}(h``non_block_end ()``h]j<)}(hjh]hnon_block_end ()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhj hhubjR)}(hhh]j6)}(h8annotate the end of section where sleeping is prohibitedh]h8annotate the end of section where sleeping is prohibited}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hO**Parameters** **Description** Closes a section opened by non_block_start().h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(h-Closes a section opened by non_block_start().h]h-Closes a section opened by non_block_start().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtrace_printk (C macro)c.trace_printkhNtauh1hhj hhhNhNubh)}(hhh](h)}(h trace_printkh]h)}(h trace_printkh]h)}(h trace_printkh]h)}(hj(h]h trace_printk}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhjEhMubah}(h]j!ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMhj#hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj#hhhjEhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j_j3j_j4uh1hhhhj hNhNubj6)}(h``trace_printk (fmt, ...)``h]j<)}(hjeh]htrace_printk (fmt, ...)}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMhj hhubjR)}(hhh]j6)}(h&printf formatting in the ftrace bufferh]h&printf formatting in the ftrace buffer}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhj{ubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hXE**Parameters** ``fmt`` the printf format for printing ``...`` variable arguments **Note** __trace_printk is an internal function for trace_printk() and the **ip** is passed in via the trace_printk() macro. **Description** This function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring. This is intended as a debugging tool for the developer only. Please refrain from leaving trace_printks scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_printk() is used.) A little optimization trick is done here. If there's only one argument, there's no need to scan the string for printf formats. The trace_puts() will suffice. But how can we take advantage of using trace_puts() when trace_printk() has only one argument? By stringifying the args and checking the size we can tell whether or not there are args. __stringify((__VA_ARGS__)) will turn into "()\0" with a size of 3 when there are no args, anything else will be bigger. All we need to do is define a string to this, and then take its size and compare to 3. If it's bigger, use do_trace_printk() otherwise, optimize it to trace_puts(). Then just let gcc optimize the rest.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj)}(hhh](j)}(h'``fmt`` the printf format for printing h](j)}(h``fmt``h]j<)}(hjh]hfmt}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj)}(hhh]j6)}(hthe printf format for printingh]hthe printf format for printing}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Note**h]jv)}(hj,h]hNote}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj)}(hhh]j)}(ht__trace_printk is an internal function for trace_printk() and the **ip** is passed in via the trace_printk() macro. h](j)}(h=__trace_printk is an internal function for trace_printk() andh]h=__trace_printk is an internal function for trace_printk() and}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjEubj)}(hhh]j6)}(h5the **ip** is passed in via the trace_printk() macro.h](hthe }(hthe hj[hhhNhNubjv)}(h**ip**h]hip}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh+ is passed in via the trace_printk() macro.}(h+ is passed in via the trace_printk() macro.hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjWhKhjXubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjBubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(hThis function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring.h]hThis function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(hThis is intended as a debugging tool for the developer only. Please refrain from leaving trace_printks scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_printk() is used.)h]hThis is intended as a debugging tool for the developer only. Please refrain from leaving trace_printks scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_printk() is used.)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhKhjubj6)}(hXA little optimization trick is done here. If there's only one argument, there's no need to scan the string for printf formats. The trace_puts() will suffice. But how can we take advantage of using trace_puts() when trace_printk() has only one argument? By stringifying the args and checking the size we can tell whether or not there are args. __stringify((__VA_ARGS__)) will turn into "()\0" with a size of 3 when there are no args, anything else will be bigger. All we need to do is define a string to this, and then take its size and compare to 3. If it's bigger, use do_trace_printk() otherwise, optimize it to trace_puts(). Then just let gcc optimize the rest.h]hXA little optimization trick is done here. If there’s only one argument, there’s no need to scan the string for printf formats. The trace_puts() will suffice. But how can we take advantage of using trace_puts() when trace_printk() has only one argument? By stringifying the args and checking the size we can tell whether or not there are args. __stringify((__VA_ARGS__)) will turn into “()0” with a size of 3 when there are no args, anything else will be bigger. All we need to do is define a string to this, and then take its size and compare to 3. If it’s bigger, use do_trace_printk() otherwise, optimize it to trace_puts(). Then just let gcc optimize the rest.}(hXA little optimization trick is done here. If there's only one argument, there's no need to scan the string for printf formats. The trace_puts() will suffice. But how can we take advantage of using trace_puts() when trace_printk() has only one argument? By stringifying the args and checking the size we can tell whether or not there are args. __stringify((__VA_ARGS__)) will turn into "()\0" with a size of 3 when there are no args, anything else will be bigger. All we need to do is define a string to this, and then take its size and compare to 3. If it's bigger, use do_trace_printk() otherwise, optimize it to trace_puts(). Then just let gcc optimize the rest.hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtrace_puts (C macro) c.trace_putshNtauh1hhj hhhNhNubh)}(hhh](h)}(h trace_putsh]h)}(h trace_putsh]h)}(h trace_putsh]h)}(hjh]h trace_puts}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMEubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMEubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMDhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hMEubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j&j3j&j4uh1hhhhj hNhNubj6)}(h``trace_puts (str)``h]j<)}(hj,h]htrace_puts (str)}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMFhj hhubjR)}(hhh]j6)}(h%write a string into the ftrace bufferh]h%write a string into the ftrace buffer}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM-hjBubah}(h]h ]h"]h$]h&]uh1jQhj hhhNhNubjl)}(hX**Parameters** ``str`` the string to record **Note** __trace_bputs is an internal function for trace_puts and the **ip** is passed in via the trace_puts macro. **Description** This is similar to trace_printk() but is made for those really fast paths that a developer wants the least amount of "Heisenbug" effects, where the processing of the print format is still too much. This function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring. This is intended as a debugging tool for the developer only. Please refrain from leaving trace_puts scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_puts() is used.) **Return** 0 if nothing was written, positive # if string was. (1 when __trace_bputs is used, strlen(str) when __trace_puts is used)h](j6)}(h**Parameters**h]jv)}(hj`h]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM1hjZubj)}(hhh]j)}(h``str`` the string to record h](j)}(h``str``h]j<)}(hjh]hstr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM.hjyubj)}(hhh]j6)}(hthe string to recordh]hthe string to record}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjvubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM0hjZubj)}(hhh]j)}(hk__trace_bputs is an internal function for trace_puts and the **ip** is passed in via the trace_puts macro. h](j)}(h8__trace_bputs is an internal function for trace_puts andh]h8__trace_bputs is an internal function for trace_puts and}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM1hjubj)}(hhh]j6)}(h1the **ip** is passed in via the trace_puts macro.h](hthe }(hthe hjhhhNhNubjv)}(h**ip**h]hip}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh' is passed in via the trace_puts macro.}(h' is passed in via the trace_puts macro.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM3hjZubj6)}(hThis is similar to trace_printk() but is made for those really fast paths that a developer wants the least amount of "Heisenbug" effects, where the processing of the print format is still too much.h]hThis is similar to trace_printk() but is made for those really fast paths that a developer wants the least amount of “Heisenbug” effects, where the processing of the print format is still too much.}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM3hjZubj6)}(hThis function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring.h]hThis function allows a kernel developer to debug fast path sections that printk is not appropriate for. By scattering in various printk like tracing in the code, a developer can quickly see where problems are occurring.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM7hjZubj6)}(hThis is intended as a debugging tool for the developer only. Please refrain from leaving trace_puts scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_puts() is used.)h]hThis is intended as a debugging tool for the developer only. Please refrain from leaving trace_puts scattered around in your code. (Extra memory is used for special buffers that are allocated when trace_puts() is used.)}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhM<hjZubj6)}(h **Return**h]jv)}(hjdh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMAhjZubj)}(hhh]j)}(hy0 if nothing was written, positive # if string was. (1 when __trace_bputs is used, strlen(str) when __trace_puts is used)h](j)}(h30 if nothing was written, positive # if string was.h]h30 if nothing was written, positive # if string was.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMAhj}ubj)}(hhh]j6)}(hE(1 when __trace_bputs is used, strlen(str) when __trace_puts is used)h]hE(1 when __trace_bputs is used, strlen(str) when __trace_puts is used)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./include/linux/kernel.hhMBhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjzubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_list_lock (C function)c.console_list_lockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_list_lock (void)h]h)}(hvoid console_list_lock(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hconsole_list_lockh]h)}(hconsole_list_lockh]hconsole_list_lock}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhjhhubj)}(hhh]j6)}(hLock the console listh]hLock the console list}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jTj3jTj4uh1hhhhj hNhNubjl)}(he**Parameters** ``void`` no arguments **Description** For console list or console->flags updatesh](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhjXubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj}h]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhjwubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhjXubj6)}(h*For console list or console->flags updatesh]h*For console list or console->flags updates}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chKhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ console_list_unlock (C function)c.console_list_unlockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_list_unlock (void)h]h)}(hvoid console_list_unlock(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hM ubh)}(hconsole_list_unlockh]h)}(hconsole_list_unlockh]hconsole_list_unlock}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hj2ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubj)}(hhh]j6)}(hUnlock the console listh]hUnlock the console list}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j}j3j}j4uh1hhhhj hNhNubjl)}(h]**Parameters** ``void`` no arguments **Description** Counterpart to console_list_lock()h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h"Counterpart to console_list_lock()h]h"Counterpart to console_list_lock()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#console_srcu_read_lock (C function)c.console_srcu_read_lockhNtauh1hhj hhhNhNubh)}(hhh](h)}(h!int console_srcu_read_lock (void)h]h)}(h int console_srcu_read_lock(void)h](j)}(hinth]hint}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj"hhhj4hMubh)}(hconsole_srcu_read_lockh]h)}(hconsole_srcu_read_lockh]hconsole_srcu_read_lock}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubj)}(hhh]j6)}(h9Register a new reader for the SRCU-protected console listh]h9Register a new reader for the SRCU-protected console list}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h7Use for_each_console_srcu() to iterate the console listh]h7Use for_each_console_srcu() to iterate the console list}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h **Context**h]jv)}(hj1h]hContext}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h Any context.h]h Any context.}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h **Return**h]jv)}(hjXh]hReturn}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h/A cookie to pass to console_srcu_read_unlock().h]h/A cookie to pass to console_srcu_read_unlock().}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%console_srcu_read_unlock (C function)c.console_srcu_read_unlockhNtauh1hhj hhhNhNubh)}(hhh](h)}(h*void console_srcu_read_unlock (int cookie)h]h)}(h)void console_srcu_read_unlock(int cookie)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM$ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM$ubh)}(hconsole_srcu_read_unlockh]h)}(hconsole_srcu_read_unlockh]hconsole_srcu_read_unlock}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hcookieh]hcookie}(hhhjhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM)hjhhubj)}(hhh]j6)}(h=Unregister an old reader from the SRCU-protected console listh]h=Unregister an old reader from the SRCU-protected console list}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM$ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j9j3j9j4uh1hhhhj hNhNubjl)}(h**Parameters** ``int cookie`` cookie returned from console_srcu_read_lock() **Description** Counterpart to console_srcu_read_lock()h](j6)}(h**Parameters**h]jv)}(hjCh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM'hj=ubj)}(hhh]j)}(h=``int cookie`` cookie returned from console_srcu_read_lock() h](j)}(h``int cookie``h]j<)}(hjbh]h int cookie}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM%hj\ubj)}(hhh]j6)}(h-cookie returned from console_srcu_read_lock()h]h-cookie returned from console_srcu_read_lock()}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhM%hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM%hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM'hj=ubj6)}(h'Counterpart to console_srcu_read_lock()h]h'Counterpart to console_srcu_read_lock()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM'hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_lock (C function)c.console_lockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_lock (void)h]h)}(hvoid console_lock(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMj ubh)}(h console_lockh]h)}(h console_lockh]h console_lock}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMj ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMj ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMj ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMp hjhhubj)}(hhh]j6)}(h)block the console subsystem from printingh]h)block the console subsystem from printing}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMi hjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMj ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jbj3jbj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMm hjfubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMp hjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMp hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMp hjubah}(h]h ]h"]h$]h&]uh1jhjfubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMr hjfubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMk hjfubj6)}(hCan sleep, returns nothing.h]hCan sleep, returns nothing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMn hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_trylock (C function)c.console_trylockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hint console_trylock (void)h]h)}(hint console_trylock(void)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj(hM ubh)}(hconsole_trylockh]h)}(hconsole_trylockh]hconsole_trylock}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubj)}(hhh]j6)}(h0try to block the console subsystem from printingh]h0try to block the console subsystem from printing}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(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.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_unlock (C function)c.console_unlockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_unlock (void)h]h)}(hvoid console_unlock(void)h](j)}(hvoidh]hvoid}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM ubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjNhhhj`hM ubh)}(hconsole_unlockh]h)}(hconsole_unlockh]hconsole_unlock}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjNhhhj`hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hM ubah}(h]jEah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjGhhubj)}(hhh]j6)}(h+unblock the console subsystem from printingh]h+unblock the console subsystem from printing}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(hXu**Parameters** ``void`` no arguments **Description** Releases the console_lock which the caller holds to block printing of the 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 prior to releasing the lock. console_unlock(); may be called from any context.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj6h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(h\Releases the console_lock which the caller holds to block printing of the console subsystem.h]h\Releases the console_lock which the caller holds to block printing of the console subsystem.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock(); emits the output 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 prior to releasing the lock.}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(h1console_unlock(); may be called from any context.h]h1console_unlock(); may be called from any context.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)console_conditional_schedule (C function)c.console_conditional_schedulehNtauh1hhj hhhNhNubh)}(hhh](h)}(h(void console_conditional_schedule (void)h]h)}(h'void console_conditional_schedule(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM ubh)}(hconsole_conditional_scheduleh]h)}(hconsole_conditional_scheduleh]hconsole_conditional_schedule}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubj)}(hhh]j6)}(hyield the CPU if requiredh]hyield the CPU if required}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(h**Parameters** ``void`` no arguments **Description** If the console code is currently allowed to sleep, and if this CPU should yield the CPU to another task, do so here. Must be called within console_lock();.h](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjBh]hvoid}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj<ubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhM hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj}h]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(htIf the console code is currently allowed to sleep, and if this CPU should yield the CPU to another task, do so here.h]htIf the console code is currently allowed to sleep, and if this CPU should yield the CPU to another task, do so here.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubj6)}(h&Must be called within console_lock();.h]h&Must be called within console_lock();.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+console_force_preferred_locked (C function) c.console_force_preferred_lockedhNtauh1hhj hhhNhNubh)}(hhh](h)}(h9void console_force_preferred_locked (struct console *con)h]h)}(h8void console_force_preferred_locked(struct console *con)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM^ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhM^ubh)}(hconsole_force_preferred_lockedh]h)}(hconsole_force_preferred_lockedh]hconsole_force_preferred_locked}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM^ubj)}(h(struct console *con)h]j$)}(hstruct console *conh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hconsoleh]hconsole}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj.modnameN classnameNjajd)}jg]jj)}j]jsb c.console_force_preferred_lockedasbuh1hhj ubj9)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hconh]hcon}(hhhjghhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMbhjhhubj)}(hhh]j6)}(h$force a registered console preferredh]h$force a registered console preferred}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(h**Parameters** ``struct console *con`` The registered console to force preferred. **Description** Must be called under console_list_lock().h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMahjubj)}(hhh]j)}(hC``struct console *con`` The registered console to force preferred. h](j)}(h``struct console *con``h]j<)}(hjh]hstruct console *con}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM^hjubj)}(hhh]j6)}(h*The registered console to force preferred.h]h*The registered console to force preferred.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM`hjubj6)}(h)Must be called under console_list_lock().h]h)Must be called under console_list_lock().}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#printk_timed_ratelimit (C function)c.printk_timed_ratelimithNtauh1hhj hhhNhNubh)}(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}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjahhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjOhhhj`hMubh)}(hprintk_timed_ratelimith]h)}(hprintk_timed_ratelimith]hprintk_timed_ratelimit}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhj`hMubj)}(h<(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j$)}(hunsigned long *caller_jiffiesh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hcaller_jiffiesh]hcaller_jiffies}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hunsigned int interval_msecsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hinterval_msecsh]hinterval_msecs}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhj`hMubah}(h]jFah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjHhhubj)}(hhh]j6)}(h%caller-controlled printk ratelimitingh]h%caller-controlled printk ratelimiting}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjlubj)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(hpointer to caller's stateh]hpointer to caller’s state}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(hminimum interval between printsh]hminimum interval between prints}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjlubj6)}(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 }(h3printk_timed_ratelimit() returns true if more than hjhhhNhNubjv)}(h**interval_msecs**h]hinterval_msecs}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhV milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.}(hV milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_register (C function)c.kmsg_dump_registerhNtauh1hhj hhhNhNubh)}(hhh](h)}(h3int kmsg_dump_register (struct kmsg_dumper *dumper)h]h)}(h2int kmsg_dump_register(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjZhhhjlhMubh)}(hkmsg_dump_registerh]h)}(hkmsg_dump_registerh]hkmsg_dump_register}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMubj)}(h(struct kmsg_dumper *dumper)h]j$)}(hstruct kmsg_dumper *dumperh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(h kmsg_dumperh]h kmsg_dumper}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kmsg_dump_registerasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdumperh]hdumper}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjShhubj)}(hhh]j6)}(hregister a kernel log dumper.h]hregister a kernel log dumper.}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj;ubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]j<)}(hj`h]hstruct kmsg_dumper *dumper}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj^ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjZubj)}(hhh]j6)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj;ubj6)}(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 }(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh or }(h or hjhhhNhNubj<)}(h ``-EBUSY``h]h-EBUSY}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmsg_dump_unregister (C function)c.kmsg_dump_unregisterhNtauh1hhj hhhNhNubh)}(hhh](h)}(h5int kmsg_dump_unregister (struct kmsg_dumper *dumper)h]h)}(h4int kmsg_dump_unregister(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkmsg_dump_unregisterh]h)}(hkmsg_dump_unregisterh]hkmsg_dump_unregister}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct kmsg_dumper *dumper)h]j$)}(hstruct kmsg_dumper *dumperh](j')}(hj*h]hstruct}(hhhjDhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj@ubj9)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubh)}(hhh]h)}(h kmsg_dumperh]h kmsg_dumper}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]j*sbc.kmsg_dump_unregisterasbuh1hhj@ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj@ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubh)}(hdumperh]hdumper}(hhhjhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubj)}(hhh]j6)}(hunregister a kmsg dumper.h]hunregister a kmsg dumper.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./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<)}(hj h]hstruct kmsg_dumper *dumper}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjDh]h Description}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(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 }(hCRemoves a dump device from the system. Returns zero on success and hjZhhhNhNubj<)}(h ``-EINVAL``h]h-EINVAL}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubh otherwise.}(h otherwise.hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_get_line (C function)c.kmsg_dump_get_linehNtauh1hhj hhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMCubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMCubh)}(hkmsg_dump_get_lineh]h)}(hkmsg_dump_get_lineh]hkmsg_dump_get_line}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMCubj)}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.kmsg_dump_get_lineasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hiterh]hiter}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h bool syslogh](j)}(hjh]hbool}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjGubh)}(hsyslogh]hsyslog}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h char *lineh](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubh)}(hlineh]hline}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kmsg_dump_get_lineasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kmsg_dump_get_lineasbuh1hhjubj9)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hlenh]hlen}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMCubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMCubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMRhjhhubj)}(hhh]j6)}(hretrieve one kmsg log lineh]hretrieve one kmsg log line}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMBhjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMCubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMFhjubj)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMChjubj)}(hhh]j6)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]j<)}(hjh]h bool syslog}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMDhjubj)}(hhh]j6)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubj)}(h*``char *line`` buffer to copy the line to h](j)}(h``char *line``h]j<)}(hj#h]h char *line}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMEhjubj)}(hhh]j6)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMEhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMEhjubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]j<)}(hj\h]h size_t size}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMFhjVubj)}(hhh]j6)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMFhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMFhjubj)}(h2``size_t *len`` length of line placed into buffer h](j)}(h``size_t *len``h]j<)}(hjh]h size_t *len}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMGhjubj)}(hhh]j6)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMIhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMIhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMLhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmsg_dump_get_buffer (C function)c.kmsg_dump_get_bufferhNtauh1hhj hhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM{ubj9)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj/hhhj@hM{ubh)}(hkmsg_dump_get_bufferh]h)}(hkmsg_dump_get_bufferh]hkmsg_dump_get_buffer}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj@hM{ubj)}(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}(hhhjohhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjkubj9)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jUsbc.kmsg_dump_get_bufferasbuh1hhjkubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjkubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjkubh)}(hiterh]hiter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(h bool syslogh](j)}(hjh]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsyslogh]hsyslog}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(h char *bufh](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hbufh]hbuf}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj\modnameN classnameNjajd)}jg]jc.kmsg_dump_get_bufferasbuh1hhjSubj9)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjSubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubj$)}(hsize_t *len_outh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.kmsg_dump_get_bufferasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hlen_outh]hlen_out}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjgubeh}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj(hhubj)}(hhh]j6)}(hcopy kmsg log linesh]hcopy kmsg log lines}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj@hM{ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj(h]h Parameters}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM~hj"ubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]j<)}(hjGh]hstruct kmsg_dump_iter *iter}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM{hjAubj)}(hhh]j6)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hM{hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM{hj>ubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]j<)}(hjh]h bool syslog}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM|hjzubj)}(hhh]j6)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM|hj>ubj)}(h)``char *buf`` buffer to copy the line to h](j)}(h ``char *buf``h]j<)}(hjh]h char *buf}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM}hjubj)}(hhh]j6)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hj>ubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM~hjubj)}(hhh]j6)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hj>ubj)}(h6``size_t *len_out`` length of line placed into buffer h](j)}(h``size_t *len_out``h]j<)}(hj+h]hsize_t *len_out}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj)ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj%ubj)}(hhh]j6)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj"ubj6)}(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 }(hUStart at the end of the kmsg buffer and fill the provided buffer with as many of the hj|hhhNhNubj0)}(h *youngest*h]hyoungest}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj|ubh| kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.}(h| kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj"ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj"ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_rewind (C function)c.kmsg_dump_rewindhNtauh1hhj hhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hkmsg_dump_rewindh]h)}(hkmsg_dump_rewindh]hkmsg_dump_rewind}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj:modnameN classnameNjajd)}jg]jj)}j]jsbc.kmsg_dump_rewindasbuh1hhjubj9)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hiterh]hiter}(hhhjshhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubj)}(hhh]j6)}(hreset the iteratorh]hreset the iterator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(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.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#__printk_cpu_sync_wait (C function)c.__printk_cpu_sync_waithNtauh1hhj hhhNhNubh)}(hhh](h)}(h"void __printk_cpu_sync_wait (void)h]h)}(h!void __printk_cpu_sync_wait(void)h](j)}(hvoidh]hvoid}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[hhhjmhMubh)}(h__printk_cpu_sync_waith]h)}(h__printk_cpu_sync_waith]h__printk_cpu_sync_wait}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj[hhhjmhMubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhj[hhhjmhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjmhMubah}(h]jRah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjThhubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(hB**Parameters** ``void`` no arguments **Context** Any context.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Context**h]jv)}(hjCh]hContext}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubj6)}(h Any context.h]h Any context.}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&__printk_cpu_sync_try_get (C function)c.__printk_cpu_sync_try_gethNtauh1hhj hhhNhNubh)}(hhh](h)}(h$int __printk_cpu_sync_try_get (void)h]h)}(h#int __printk_cpu_sync_try_get(void)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h__printk_cpu_sync_try_geth]h)}(h__printk_cpu_sync_try_geth]h__printk_cpu_sync_try_get}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj}hhubj)}(hhh]j6)}(h6Try to acquire the printk cpu-reentrant spinning lock.h]h6Try to acquire the printk cpu-reentrant spinning lock.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(hXY**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj1h]hvoid}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj+ubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhM hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjlh]h Description}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMhj ubj6)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj ubj6)}(h1 on success, otherwise 0.h]h1 on success, otherwise 0.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"__printk_cpu_sync_put (C function)c.__printk_cpu_sync_puthNtauh1hhj hhhNhNubh)}(hhh](h)}(h!void __printk_cpu_sync_put (void)h]h)}(h void __printk_cpu_sync_put(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM;ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj hM;ubh)}(h__printk_cpu_sync_puth]h)}(h__printk_cpu_sync_puth]h__printk_cpu_sync_put}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM;ubj)}(h(void)h]j$)}(hvoidh]j)}(hvoidh]hvoid}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]noemphjj uh1j#hj4ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM;ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM@hjhhubj)}(hhh]j6)}(h/Release the printk cpu-reentrant spinning lock.h]h/Release the printk cpu-reentrant spinning lock.}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM:hjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM;ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM>hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMAhjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chMChjubj6)}(h4The calling processor must be the owner of the lock.h]h4The calling processor must be the owner of the lock.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM<hjubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM>hjubj6)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:118: ./kernel/printk/printk.chM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpanic (C function)c.panichNtauh1hhj hhhNhNubh)}(hhh](h)}(h!void panic (const char *fmt, ...)h]h)}(h void panic(const char *fmt, ...)h](j)}(hvoidh]hvoid}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjKhhhj]hMubh)}(hpanich]h)}(hpanich]hpanic}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj]hMubj)}(h(const char *fmt, ...)h](j$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hfmth]hfmt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h...h]j~)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjDhhubj)}(hhh]j6)}(hhalt the systemh]hhalt the system}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhj hNhNubjl)}(h**Parameters** ``const char *fmt`` The text string to print Display a message, then perform cleanups. This function never returns. ``...`` variable argumentsh](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhj/ubj)}(hhh](j)}(hv``const char *fmt`` The text string to print Display a message, then perform cleanups. This function never returns. h](j)}(h``const char *fmt``h]j<)}(hjTh]hconst char *fmt}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjNubj)}(hhh](j6)}(hThe text string to printh]hThe text string to print}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjjubj6)}(h)Display a message, then perform cleanups.h]h)Display a message, then perform cleanups.}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjjubj6)}(hThis function never returns.h]hThis function never returns.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjKubj)}(h``...`` variable argumentsh](j)}(h``...``h]j<)}(hjh]h...}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjubj)}(hhh]j6)}(hvariable argumentsh]hvariable arguments}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_taint (C function) c.add_tainthNtauh1hhj hhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h add_tainth]h)}(h add_tainth]h add_taint}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h+(unsigned flag, enum lockdep_ok lockdep_ok)h](j$)}(h unsigned flagh](j)}(hunsignedh]hunsigned}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj>ubh)}(hflagh]hflag}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj:ubj$)}(henum lockdep_ok lockdep_okh](j')}(hjih]henum}(hhhjwhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjsubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubh)}(hhh]h)}(h lockdep_okh]h lockdep_ok}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j(sb c.add_taintasbuh1hhjsubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjsubh)}(h lockdep_okh]h lockdep_ok}(hhhjhhhNhNubah}(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&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chM%hjhhubj)}(hhh]j6)}(h$add a taint flag if not already set.h]h$add a taint flag if not already set.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chM"hj ubj)}(hhh](j)}(h0``unsigned flag`` one of the TAINT_* constants. h](j)}(h``unsigned flag``h]j<)}(hj/h]h unsigned flag}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj-ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chMhj)ubj)}(hhh]j6)}(hone of the TAINT_* constants.h]hone of the TAINT_* constants.}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubj)}(hC``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. h](j)}(h``enum lockdep_ok lockdep_ok``h]j<)}(hjhh]henum lockdep_ok lockdep_ok}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjfubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chM hjbubj)}(hhh]j6)}(h#whether lock debugging is still OK.h]h#whether lock debugging is still OK.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hM hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chM"hj ubj6)}(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 }(h-If something bad has gone wrong, you'll want hjhhhNhNubjv)}(h**lockdebug_ok**h]h lockdebug_ok}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.}(hR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:122: ./kernel/panic.chM"hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj hhhNhNubeh}(h]kernel-utility-functionsah ]h"]kernel utility functionsah$]h&]uh1hhhhhhhhKpubh)}(hhh](h)}(hDevice Resource Managementh]hDevice Resource Management}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK~ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ __devres_alloc_node (C function)c.__devres_alloc_nodehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKubj9)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhj#hKubj~)}(hjh]h*}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhj#hKubh)}(h__devres_alloc_nodeh]h)}(h__devres_alloc_nodeh]h__devres_alloc_node}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj#hKubj)}(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}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjdmodnameN classnameNjajd)}jg]jj)}j]jEsbc.__devres_alloc_nodeasbuh1hhj[ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj[ubh)}(hreleaseh]hrelease}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j~c.__devres_alloc_nodeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j~c.__devres_alloc_nodeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hgfph]hgfp}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(hint nidh](j)}(hinth]hint}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5ubh)}(hnidh]hnid}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubj$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjnhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjjubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjjubh)}(hnameh]hname}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjWubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj#hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj#hKubah}(h]jah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhj hhubj)}(hhh]j6)}(hAllocate device resource datah]hAllocate device resource data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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<)}(hjh]hdr_release_t release}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(h/Release function devres will be associated withh]h/Release function devres will be associated with}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]j<)}(hjWh]h size_t size}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjQubj)}(hhh]j6)}(hAllocation sizeh]hAllocation size}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hAllocation flagsh]hAllocation flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``int nid`` NUMA node h](j)}(h ``int nid``h]j<)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(h NUMA nodeh]h NUMA node}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``const char *name`` Name of the resource h](j)}(h``const char *name``h]j<)}(hjh]hconst char *name}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hName of the resourceh]hName of the resource}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj=h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(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 }(hAllocate devres of hjShhhNhNubjv)}(h**size**h]hsize}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubh< bytes. The allocated area is zeroed, then associated with }(h< bytes. The allocated area is zeroed, then associated with hjShhhNhNubjv)}(h **release**h]hrelease}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubhD. The returned pointer can be passed to other devres_*() functions.}(hD. The returned pointer can be passed to other devres_*() functions.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(h8Pointer to allocated devres on success, NULL on failure.h]h8Pointer to allocated devres on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devres_for_each_res (C function)c.devres_for_each_reshNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(hdevres_for_each_resh]h)}(hdevres_for_each_resh]hdevres_for_each_res}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj-modnameN classnameNjajd)}jg]jj)}j]jsbc.devres_for_each_resasbuh1hhj ubj9)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hdevh]hdev}(hhhjfhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jGc.devres_for_each_resasbuh1hhj{ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj{ubh)}(hreleaseh]hrelease}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jGc.devres_for_each_resasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmatchh]hmatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(h match_datah]h match_data}(hhhj8hhhNhNubah}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubj~)}(hj7h]h(}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj~)}(hjh]h*}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubh)}(hfnh]hfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jGc.devres_for_each_resasbuh1hhjMubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj~)}(hjd8h]h,}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj~)}(hjh]h*}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj~)}(hjd8h]h,}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj9)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjMubj)}(hvoidh]hvoid}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj~)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubj~)}(hjh]h)}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjxubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubj)}(hhh]j6)}(hResource iteratorh]hResource iterator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(hX@**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh](j)}(h7``struct device *dev`` Device to iterate resource from h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhj ubj)}(hhh]j6)}(hDevice to iterate resource fromh]hDevice to iterate resource from}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j<)}(hjJh]hdr_release_t release}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjDubj)}(hhh]j6)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j<)}(hjh]hdr_match_t match}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhj}ubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j<)}(hjh]hvoid *match_data}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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<)}(hjh]h+void (*fn)(struct device *, void *, void *)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(h0Function to be called for each matched resource.h]h0Function to be called for each matched resource.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h<``void *data`` Data for **fn**, the 3rd parameter of **fn** h](j)}(h``void *data``h]j<)}(hj.h]h void *data}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj,ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhj(ubj)}(hhh]j6)}(h,Data for **fn**, the 3rd parameter of **fn**h](h Data for }(h Data for hjGhhhNhNubjv)}(h**fn**h]hfn}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh, the 3rd parameter of }(h, the 3rd parameter of hjGhhhNhNubjv)}(h**fn**h]hfn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubeh}(h]h ]h"]h$]h&]uh1j5hjChKhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(hnCall **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1.h](hCall }(hCall hjhhhNhNubjv)}(h**fn**h]hfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for each devres of }(h for each devres of hjhhhNhNubjv)}(h**dev**h]hdev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh which is associated with }(h which is associated with hjhhhNhNubjv)}(h **release**h]hrelease}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and for which }(h and for which hjhhhNhNubjv)}(h **match**h]hmatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh returns 1.}(h returns 1.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubjR)}(hhh]j6)}(hvoidh]hvoid}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_free (C function) c.devres_freehNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid devres_free (void *res)h]h)}(hvoid devres_free(void *res)h](j)}(hvoidh]hvoid}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjIhhhj[hKubh)}(h devres_freeh]h)}(h devres_freeh]h devres_free}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhj[hKubj)}(h (void *res)h]j$)}(h void *resh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hresh]hres}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubah}(h]h ]h"]h$]h&]jj uh1jhjIhhhj[hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhj[hKubah}(h]j@ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjBhhubj)}(hhh]j6)}(hFree device resource datah]hFree device resource data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(hy**Parameters** ``void *res`` Pointer to devres data to free **Description** Free devres created with devres_alloc().h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j)}(h-``void *res`` Pointer to devres data to free h](j)}(h ``void *res``h]j<)}(hjh]h void *res}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hPointer to devres data to freeh]hPointer to devres data to free}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(h(Free devres created with devres_alloc().h]h(Free devres created with devres_alloc().}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_add (C function) c.devres_addhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhKubh)}(h devres_addh]h)}(h devres_addh]h devres_add}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(struct device *dev, void *res)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.devres_addasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *resh](j)}(hvoidh]hvoid}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubh)}(hresh]hres}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubj)}(hhh]j6)}(hRegister device resourceh]hRegister device resource}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh](j)}(h1``struct device *dev`` Device to add resource to h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hDevice to add resource toh]hDevice to add resource to}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h#``void *res`` Resource to register h](j)}(h ``void *res``h]j<)}(hjh]h void *res}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj)}(hhh]j6)}(hResource to registerh]hResource to register}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjWh]h Description}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubj6)}(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 }(hRegister devres hjmhhhNhNubjv)}(h**res**h]hres}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh to }(h to hjmhhhNhNubjv)}(h**dev**h]hdev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh. }(h. hjmhhhNhNubjv)}(h**res**h]hres}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.}(h should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_find (C function) c.devres_findhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhMubh)}(h devres_findh]h)}(h devres_findh]h devres_find}(hhhjhhhNhNubah}(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}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj@modnameN classnameNjajd)}jg]jj)}j]jsb c.devres_findasbuh1hhjubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjyhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jZ c.devres_findasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hreleaseh]hrelease}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jZ c.devres_findasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmatchh]hmatch}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h match_datah]h match_data}(hhhjKhhhNhNubah}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubj)}(hhh]j6)}(hFind device resourceh]hFind device resource}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hDevice to lookup resource fromh]hDevice to lookup resource from}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj#ubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMhj?ubah}(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<)}(hjbh]hvoid *match_data}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj\ubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(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 }(hFind the latest devres of hjhhhNhNubjv)}(h**dev**h]hdev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh which is associated with }(h which is associated with hjhhhNhNubjv)}(h **release**h]hrelease}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and for which }(h and for which hjhhhNhNubjv)}(h **match**h]hmatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh returns 1. If }(h returns 1. If hjhhhNhNubjv)}(h **match**h]hmatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) is NULL, it’s considered to match all.}(h' is NULL, it's considered to match all.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h+Pointer to found devres, NULL if not found.h]h+Pointer to found devres, NULL if not found.}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_get (C function) c.devres_gethNtauh1hhjhhhNhNubh)}(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}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM0ubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjRhhhjdhM0ubj~)}(hjh]h*}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRhhhjdhM0ubh)}(h devres_geth]h)}(h devres_geth]h devres_get}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjdhM0ubj)}(hG(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsb c.devres_getasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *new_resh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hnew_resh]hnew_res}(hhhj;hhhNhNubah}(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}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjYmodnameN classnameNjajd)}jg]j c.devres_getasbuh1hhjPubj9)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjPubh)}(hmatchh]hmatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h match_datah]h match_data}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjdhM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjdhM0ubah}(h]jIah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM<hjKhhubj)}(hhh]j6)}(h0Find devres, if non-existent, add one atomicallyh]h0Find devres, if non-existent, add one atomically}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM3hj ubj)}(hhh](j)}(h:``struct device *dev`` Device to lookup or add devres for h](j)}(h``struct device *dev``h]j<)}(hj1h]hstruct device *dev}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM0hj+ubj)}(hhh]j6)}(h"Device to lookup or add devres forh]h"Device to lookup or add devres for}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhM0hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM0hj(ubj)}(hH``void *new_res`` Pointer to new initialized devres to add if not found h](j)}(h``void *new_res``h]j<)}(hjjh]h void *new_res}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM1hjdubj)}(hhh]j6)}(h5Pointer to new initialized devres to add if not foundh]h5Pointer to new initialized devres to add if not found}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhM1hj(ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j<)}(hjh]hdr_match_t match}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM2hjubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM2hjubah}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM3hjubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM5hj ubj6)}(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 }(hFind the latest devres of hj-hhhNhNubjv)}(h**dev**h]hdev}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh( which has the same release function as }(h( which has the same release function as hj-hhhNhNubjv)}(h **new_res**h]hnew_res}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh and for which }(h and for which hj-hhhNhNubjv)}(h **match**h]hmatch}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh return 1. If found, }(h return 1. If found, hj-hhhNhNubjv)}(h **new_res**h]hnew_res}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh is freed; otherwise, }(h is freed; otherwise, hj-hhhNhNubjv)}(h **new_res**h]hnew_res}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh is added atomically.}(h is added atomically.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM5hj ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM9hj ubj6)}(h!Pointer to found or added devres.h]h!Pointer to found or added devres.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM;hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_remove (C function)c.devres_removehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMSubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMSubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhMSubh)}(h devres_removeh]h)}(h devres_removeh]h devres_remove}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMSubj)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj-hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj)ubj9)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjMmodnameN classnameNjajd)}jg]jj)}j]jsbc.devres_removeasbuh1hhj)ubj9)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj%ubj$)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jgc.devres_removeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hreleaseh]hrelease}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj%ubj$)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jgc.devres_removeasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmatchh]hmatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj%ubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+ubj~)}(hjh]h*}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj+ubh)}(h match_datah]h match_data}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj%ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMSubah}(h]jah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM`hjhhubj)}(hhh]j6)}(h$Find a device resource and remove ith]h$Find a device resource and remove it}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMSubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMShjubj)}(hhh]j6)}(hDevice to find resource fromh]hDevice to find resource from}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMShjubah}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMThjubj)}(hhh]j6)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMThjubah}(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<)}(hj6h]hdr_match_t match}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMUhj0ubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjKhMUhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMUhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j<)}(hjoh]hvoid *match_data}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMVhjiubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMXhjubj6)}(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 }(hFind the latest devres of hjhhhNhNubjv)}(h**dev**h]hdev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh associated with }(h associated with hjhhhNhNubjv)}(h **release**h]hrelease}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and for which }(h and for which hjhhhNhNubjv)}(h **match**h]hmatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh returns 1. If }(h returns 1. If hjhhhNhNubjv)}(h **match**h]hmatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhe is NULL, it’s considered to match all. If found, the resource is removed atomically and returned.}(hc is NULL, it's considered to match all. If found, the resource is removed atomically and returned.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMXhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM]hjubj6)}(h8Pointer to removed devres on success, NULL if not found.h]h8Pointer to removed devres on success, NULL if not found.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_destroy (C function)c.devres_destroyhNtauh1hhjhhhNhNubh)}(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}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMvubj9)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj_hhhjqhMvubh)}(hdevres_destroyh]h)}(hdevres_destroyh]hdevres_destroy}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjqhMvubj)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.devres_destroyasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.devres_destroyasbuh1hhjubj9)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hreleaseh]hrelease}(hhhjAhhhNhNubah}(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}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj_modnameN classnameNjajd)}jg]jc.devres_destroyasbuh1hhjVubj9)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjVubh)}(hmatchh]hmatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(h match_datah]h match_data}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhjqhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjqhMvubah}(h]jVah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjXhhubj)}(hhh]j6)}(h%Find a device resource and destroy ith]h%Find a device resource and destroy it}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhMvubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMyhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]j<)}(hj7h]hstruct device *dev}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMvhj1ubj)}(hhh]j6)}(hDevice to find resource fromh]hDevice to find resource from}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhMvhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMvhj.ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j<)}(hjph]hdr_release_t release}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjnubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMwhjjubj)}(hhh]j6)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhj.ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j<)}(hjh]hdr_match_t match}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMxhjubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhj.ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j<)}(hjh]hvoid *match_data}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMyhjubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM{hjubj6)}(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 }(hFind the latest devres of hj3hhhNhNubjv)}(h**dev**h]hdev}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh associated with }(h associated with hj3hhhNhNubjv)}(h **release**h]hrelease}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh and for which }(h and for which hj3hhhNhNubjv)}(h **match**h]hmatch}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh returns 1. If }(h returns 1. If hj3hhhNhNubjv)}(h **match**h]hmatch}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubhb is NULL, it’s considered to match all. If found, the resource is removed atomically and freed.}(h` is NULL, it's considered to match all. If found, the resource is removed atomically and freed.hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM{hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_release (C function)c.devres_releasehNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hdevres_releaseh]h)}(hdevres_releaseh]hdevres_release}(hhhjhhhNhNubah}(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}(hhhj"hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jj)}j]jsbc.devres_releaseasbuh1hhjubj9)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhj{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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j\c.devres_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hreleaseh]hrelease}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]j\c.devres_releaseasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hmatchh]hmatch}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(h match_datah]h match_data}(hhhjMhhhNhNubah}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubj)}(hhh]j6)}(h6Find a device resource and destroy it, calling releaseh]h6Find a device resource and destroy it, calling release}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(hXP**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hDevice to find resource fromh]hDevice to find resource from}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j<)}(hj+ h]hdr_match_t match}(hhhj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj) ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj% ubj)}(hhh]j6)}(hMatch function (optional)h]hMatch function (optional)}(hjF hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@ hMhjA ubah}(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<)}(hjd h]hvoid *match_data}(hhhjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjb ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj^ ubj)}(hhh]j6)}(hData for the match functionh]hData for the match function}(hj hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjy hMhjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(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 }(hFind the latest devres of hj hhhNhNubjv)}(h**dev**h]hdev}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh associated with }(h associated with hj hhhNhNubjv)}(h **release**h]hrelease}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh and for which }(h and for which hj hhhNhNubjv)}(h **match**h]hmatch}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh returns 1. If }(h returns 1. If hj hhhNhNubjv)}(h **match**h]hmatch}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is NULL, it’s considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.}(h is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hj+ hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_open_group (C function)c.devres_open_grouphNtauh1hhjhhhNhNubh)}(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}(hhhjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjg hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjT hhhjf hMubj~)}(hjh]h*}(hhhju hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjT hhhjf hMubh)}(hdevres_open_grouph]h)}(hdevres_open_grouph]hdevres_open_group}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjT hhhjf hMubj)}(h)(struct device *dev, void *id, gfp_t gfp)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]j sbc.devres_open_groupasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hdevh]hdev}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hvoid *idh](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj" hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hidh]hid}(hhhj= 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}(hhhjY hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[ modnameN classnameNjajd)}jg]j c.devres_open_groupasbuh1hhjR ubj9)}(h h]h }(hhhjw hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjR ubh)}(hgfph]hgfp}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjT hhhjf hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjP hhhjf hMubah}(h]jK ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM(hjM hhubj)}(hhh]j6)}(hOpen a new devres grouph]hOpen a new devres group}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjM hhhjf hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM 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}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj ubj)}(hhh]j6)}(hDevice to open devres group forh]hDevice to open devres group for}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj, hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj( ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$ ubj)}(hhh]j6)}(h Separator IDh]h Separator ID}(hjE hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj? 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<)}(hjc h]h gfp_t gfp}(hhhje hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hja ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj] ubj)}(hhh]j6)}(hAllocation flagsh]hAllocation flags}(hj~ hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjx hMhjy ubah}(h]h ]h"]h$]h&]uh1jhj] ubeh}(h]h ]h"]h$]h&]uh1jhjx hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM!hj ubj6)}(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 }(hOpen a new devres group for hj hhhNhNubjv)}(h**dev**h]hdev}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh with }(h with hj hhhNhNubjv)}(h**id**h]hid}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh. For }(h. For hj hhhNhNubjv)}(h**id**h]hid}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh[, using a pointer to an object which won’t be used for another group is recommended. If }(hY, using a pointer to an object which won't be used for another group is recommended. If hj hhhNhNubjv)}(h**id**h]hid}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh, is NULL, address-wise unique ID is created.}(h, is NULL, address-wise unique ID is created.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM!hj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM%hj ubj6)}(h%ID of the new group, NULL on failure.h]h%ID of the new group, NULL on failure.}(hj* hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM'hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_close_group (C function)c.devres_close_grouphNtauh1hhjhhhNhNubh)}(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}(hhhjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM[ubj9)}(h h]h }(hhhjf hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjS hhhje hM[ubh)}(hdevres_close_grouph]h)}(hdevres_close_grouph]hdevres_close_group}(hhhjx hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjS hhhje hM[ubj)}(h(struct device *dev, void *id)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]jj)}j]jz sbc.devres_close_groupasbuh1hhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hdevh]hdev}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubj$)}(hvoid *idh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hidh]hid}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjS hhhje hM[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjO hhhje hM[ubah}(h]jJ ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMahjL hhubj)}(hhh]j6)}(hClose a devres grouph]hClose a devres group}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMZhjWhhubah}(h]h ]h"]h$]h&]uh1jhjL hhhje hM[ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jrj3jrj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM^hjvubj)}(hhh](j)}(h8``struct device *dev`` Device to close devres group for h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM[hjubj)}(hhh]j6)}(h Device to close devres group forh]h Device to close devres group for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j<)}(hjh]hvoid *id}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM\hjubj)}(hhh]j6)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubeh}(h]h ]h"]h$]h&]uh1jhjvubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM^hjvubj6)}(h\Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](hClose the group identified by }(hClose the group identified by hj%hhhNhNubjv)}(h**id**h]hid}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh. If }(h. If hj%hhhNhNubjv)}(h**id**h]hid}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh, is NULL, the latest open group is selected.}(h, is NULL, the latest open group is selected.hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM^hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devres_remove_group (C function)c.devres_remove_grouphNtauh1hhjhhhNhNubh)}(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}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMtubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjwhhhjhMtubh)}(hdevres_remove_grouph]h)}(hdevres_remove_grouph]hdevres_remove_group}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhMtubj)}(h(struct device *dev, void *id)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.devres_remove_groupasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *idh](j)}(hvoidh]hvoid}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hidh]hid}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjhMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjhMtubah}(h]jnah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM{hjphhubj)}(hhh]j6)}(hRemove a devres grouph]hRemove a devres group}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMshj{hhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMtubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMwhjubj)}(hhh](j)}(h2``struct device *dev`` Device to remove group for h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMthjubj)}(hhh]j6)}(hDevice to remove group forh]hDevice to remove group for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j<)}(hjh]hvoid *id}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMuhjubj)}(hhh]j6)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMuhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj3h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMwhjubj6)}(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 }(hRemove the group identified by hjIhhhNhNubjv)}(h**id**h]hid}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubh. If }(h. If hjIhhhNhNubjv)}(h**id**h]hid}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubhn is NULL, the latest open group is selected. Note that removing a group doesn’t affect any other resources.}(hl is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!devres_release_group (C function)c.devres_release_grouphNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(hdevres_release_grouph]h)}(hdevres_release_grouph]hdevres_release_group}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct device *dev, void *id)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jsbc.devres_release_groupasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid *idh](j)}(hvoidh]hvoid}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjJubj~)}(hjh]h*}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubh)}(hidh]hid}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjVhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubj)}(hhh]j6)}(h#Release resources in a devres grouph]h#Release resources in a devres group}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h3``struct device *dev`` Device to release group for h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hDevice to release group forh]hDevice to release group for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j<)}(hjh]hvoid *id}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjWh]h Description}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(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 }(h1Release all resources in the group identified by hjmhhhNhNubjv)}(h**id**h]hid}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh. If }(h. If hjmhhhNhNubjv)}(h**id**h]hid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubh is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.}(h is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(h+The number of released non-group resources.h]h+The number of released non-group resources.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__devm_add_action (C function)c.__devm_add_actionhNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMubh)}(h__devm_add_actionh]h)}(h__devm_add_actionh]h__devm_add_action}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hI(struct device *dev, void (*action)(void*), void *data, const char *name)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj'hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjGmodnameN classnameNjajd)}jg]jj)}j]j sbc.__devm_add_actionasbuh1hhj#ubj9)}(h h]h }(hhhjehhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj~)}(hjh]h*}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#ubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hactionh]haction}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hdatah]hdata}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hconst char *nameh](j')}(hjn'h]hconst}(hhhjlhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhubj9)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhubh)}(hnameh]hname}(hhhjhhhNhNubah}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubj)}(hhh]j6)}(h0add a custom action to list of managed resourcesh]h0add a custom action to list of managed resources}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hDevice that owns the actionh]hDevice that owns the action}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h:``void (*action)(void *)`` Function that should be called h](j)}(h``void (*action)(void *)``h]j<)}(hjUh]hvoid (*action)(void *)}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjOubj)}(hhh]j6)}(hFunction that should be calledh]hFunction that should be called}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hPointer to data passed to hjhhhNhNubjv)}(h **action**h]haction}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh implementation}(h implementationhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``const char *name`` Name of the resource (for debugging purposes) h](j)}(h``const char *name``h]j<)}(hjh]hconst char *name}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h-Name of the resource (for debugging purposes)h]h-Name of the resource (for debugging purposes)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj6)}(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.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_remove_action (C function)c.devm_remove_actionhNtauh1hhjhhhNhNubh)}(hhh](h)}(hPvoid devm_remove_action (struct device *dev, void (*action)(void *), void *data)h]h)}(hNvoid devm_remove_action(struct device *dev, void (*action)(void*), void *data)h](j)}(hvoidh]hvoid}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjWhhhjihMubh)}(hdevm_remove_actionh]h)}(hdevm_remove_actionh]hdevm_remove_action}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjihMubj)}(h7(struct device *dev, void (*action)(void*), void *data)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]j~sbc.devm_remove_actionasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hactionh]haction}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj)}(hvoidh]hvoid}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj~)}(hjh]h*}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h)}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubeh}(h]h ]h"]h$]h&]jj uh1jhjWhhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjihMubah}(h]jNah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjPhhubj)}(hhh]j6)}(h&removes previously added custom actionh]h&removes previously added custom action}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j<)}(hj0h]hstruct device *dev}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj*ubj)}(hhh]j6)}(hDevice that owns the actionh]hDevice that owns the action}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]j<)}(hjih]hvoid (*action)(void *)}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjcubj)}(hhh]j6)}(h Function implementing the actionh]h Function implementing the action}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(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<)}(hjh]h void *data}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hPointer to data passed to hjhhhNhNubjv)}(h **action**h]haction}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh implementation}(h implementationhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj ubj6)}(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 }(hRemoves instance of hjhhhNhNubjv)}(h **action**h]haction}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hf previously added by devm_add_action(). Both action and data should match one of the existing entries.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_release_action (C function)c.devm_release_actionhNtauh1hhjhhhNhNubh)}(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}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjFhhhjXhMubh)}(hdevm_release_actionh]h)}(hdevm_release_actionh]hdevm_release_action}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhMubj)}(h7(struct device *dev, void (*action)(void*), void *data)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jmsbc.devm_release_actionasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hj7h]h(}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hactionh]haction}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj~)}(hjh]h)}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hj7h]h(}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj)}(hvoidh]hvoid}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj~)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj~)}(hjh]h)}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjubj$)}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj?hhubj)}(hhh]j6)}(h&release previously added custom actionh]h&release previously added custom action}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM hjubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(hDevice that owns the actionh]hDevice that owns the action}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]j<)}(hjXh]hvoid (*action)(void *)}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjRubj)}(hhh]j6)}(h Function implementing the actionh]h Function implementing the action}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjubj)}(hhh]j6)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hPointer to data passed to hjhhhNhNubjv)}(h **action**h]haction}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh implementation}(h implementationhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM hjubj6)}(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 }(h!Releases and removes instance of hjhhhNhNubjv)}(h **action**h]haction}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhg previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hg previously added by devm_add_action(). Both action and data should match one of the existing entries.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kmalloc (C function)c.devm_kmallochNtauh1hhjhhhNhNubh)}(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}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM*ubj9)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj5hhhjGhM*ubj~)}(hjh]h*}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj5hhhjGhM*ubh)}(h devm_kmalloch]h)}(h devm_kmalloch]h devm_kmalloc}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhjGhM*ubj)}(h,(struct device *dev, size_t size, gfp_t gfp)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jj)}j]jisbc.devm_kmallocasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubj~)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubj$)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjmodnameN classnameNjajd)}jg]jc.devm_kmallocasbuh1hhjubj9)}(h h]h }(hhhjhhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjubh)}(hsizeh]hsize}(hhhj$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}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjBmodnameN classnameNjajd)}jg]jc.devm_kmallocasbuh1hhj9ubj9)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj9ubh)}(hgfph]hgfp}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj{ubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhjGhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhjGhM*ubah}(h]j,ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM5hj.hhubj)}(hhh]j6)}(hResource-managed kmalloch]hResource-managed kmalloc}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM)hjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhM*ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM-hjubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j<)}(hjh]hstruct device *dev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM*hjubj)}(hhh]j6)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM+hj ubj)}(hhh]j6)}(hAllocation sizeh]hAllocation size}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hM+hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM+hjubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]j<)}(hjJh]h gfp_t gfp}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM,hjDubj)}(hhh]j6)}(hAllocation gfp flagsh]hAllocation gfp flags}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM,hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM.hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM.hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM2hjubj6)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_krealloc (C function)c.devm_kreallochNtauh1hhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMMubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjhhhjhMMubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhjhMMubh)}(h devm_krealloch]h)}(h devm_krealloch]h devm_krealloc}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMMubj)}(h;(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj; hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj7 ubj9)}(h h]h }(hhhjH hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7 ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjY hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj[ modnameN classnameNjajd)}jg]jj)}j]j! sbc.devm_kreallocasbuh1hhj7 ubj9)}(h h]h }(hhhjy hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj7 ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7 ubh)}(hdevh]hdev}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7 ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3 ubj$)}(h void *ptrh](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(h h]h }(hhhj hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubj~)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubh)}(hptrh]hptr}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3 ubj$)}(hsize_t new_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj modnameN classnameNjajd)}jg]ju c.devm_kreallocasbuh1hhj ubj9)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ubh)}(hnew_sizeh]hnew_size}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj3 ubj$)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj:!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7!ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj"ubj)}(hhh]j6)}(hNew allocation sizeh]hNew allocation size}(hj_"hj]"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjY"hMOhjZ"ubah}(h]h ]h"]h$]h&]uh1jhj>"ubeh}(h]h ]h"]h$]h&]uh1jhjY"hMOhj!ubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]j<)}(hj}"h]h gfp_t gfp}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{"ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMPhjw"ubj)}(hhh]j6)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMPhj"ubah}(h]h ]h"]h$]h&]uh1jhjw"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMPhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj6)}(h**Description**h]jv)}(hj"h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMRhj!ubj6)}(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 }(hxManaged krealloc(). Resizes the memory chunk allocated with devm_kmalloc(). Behaves similarly to regular krealloc(): if hj"hhhNhNubjv)}(h**ptr**h]hptr}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubhX 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.}(hX 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.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMRhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kstrdup (C function)c.devm_kstrduphNtauh1hhjhhhNhNubh)}(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}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhj #hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj #hhhj#hMubj~)}(hjh]h*}(hhhj.#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj #hhhj#hMubh)}(h devm_kstrduph]h)}(h devm_kstrduph]h devm_kstrdup}(hhhj?#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}(hhhj[#hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjW#ubj9)}(h h]h }(hhhjh#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW#ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjy#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv#ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj{#modnameN classnameNjajd)}jg]jj)}j]jA#sbc.devm_kstrdupasbuh1hhjW#ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW#ubj~)}(hjh]h*}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjW#ubh)}(hdevh]hdev}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS#ubj$)}(h const char *sh](j')}(hjn'h]hconst}(hhhj#hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj#ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj)}(hcharh]hchar}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj#ubj~)}(hjh]h*}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj#ubh)}(hsh]hs}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS#ubj$)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj-$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*$ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/$modnameN classnameNjajd)}jg]j#c.devm_kstrdupasbuh1hhj&$ubj9)}(h h]h }(hhhjK$hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&$ubh)}(hgfph]hgfp}(hhhjY$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjS#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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj#hhubj)}(hhh]j6)}(hFAllocate resource managed space and copy an existing string into that.h]hFAllocate resource managed space and copy an existing string into that.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$ubj)}(hhh]j6)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$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}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$ubj)}(hhh]j6)}(hthe string to duplicateh]hthe string to duplicate}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%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<)}(hj7%h]h gfp_t gfp}(hhhj9%hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj1%ubj)}(hhh]j6)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hjR%hjP%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjM%ubah}(h]h ]h"]h$]h&]uh1jhj1%ubeh}(h]h ]h"]h$]h&]uh1jhjL%hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj6)}(h **Return**h]jv)}(hjs%h]hReturn}(hhhju%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjq%ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$ubj6)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kstrdup_const (C function)c.devm_kstrdup_consthNtauh1hhjhhhNhNubh)}(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')}(hjn'h]hconst}(hhhj%hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj%hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%hhhj%hMubj)}(hcharh]hchar}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubj9)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj%hhhj%hMubj~)}(hjh]h*}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj%hhhj%hMubh)}(hdevm_kstrdup_consth]h)}(hdevm_kstrdup_consth]hdevm_kstrdup_const}(hhhj&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}(hhhj&hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj&ubj9)}(h h]h }(hhhj*&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj;&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj=&modnameN classnameNjajd)}jg]jj)}j]j&sbc.devm_kstrdup_constasbuh1hhj&ubj9)}(h h]h }(hhhj[&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhji&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hdevh]hdev}(hhhjv&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj&ubj$)}(h const char *sh](j')}(hjn'h]hconst}(hhhj&hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj&ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj)}(hcharh]hchar}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubj~)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&ubh)}(hj$h]hs}(hhhj&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}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj&modnameN classnameNjajd)}jg]jW&c.devm_kstrdup_constasbuh1hhj&ubj9)}(h h]h }(hhhj 'hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj&ubh)}(hgfph]hgfp}(hhhj'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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj%hhubj)}(hhh]j6)}(h/resource managed conditional string duplicationh]h/resource managed conditional string duplication}(hjG'hjE'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjB'hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j]'j3j]'j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjg'h]h Parameters}(hhhji'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhje'ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhja'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}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj'ubj)}(hhh]j6)}(h(device for which to duplicate the stringh]h(device for which to duplicate the string}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'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}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj'ubj)}(hhh]j6)}(hthe string to duplicateh]hthe string to duplicate}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'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}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj'ubj)}(hhh]j6)}(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(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj (hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj (hMhj}'ubeh}(h]h ]h"]h$]h&]uh1jhja'ubj6)}(h**Description**h]jv)}(hj3(h]h Description}(hhhj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1(ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhja'ubj6)}(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.}(hjK(hjI(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhja'ubj6)}(h **Return**h]jv)}(hjZ(h]hReturn}(hhhj\(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjX(ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhja'ubj6)}(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.}(hjr(hjp(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhja'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kvasprintf (C function)c.devm_kvasprintfhNtauh1hhjhhhNhNubh)}(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}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(hhhj(hMubj~)}(hjh]h*}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(hhhj(hMubh)}(hdevm_kvasprintfh]h)}(hdevm_kvasprintfh]hdevm_kvasprintf}(hhhj(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}(hhhj(hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj(ubj9)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj )modnameN classnameNjajd)}jg]jj)}j]j(sbc.devm_kvasprintfasbuh1hhj(ubj9)}(h h]h }(hhhj')hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj(ubj~)}(hjh]h*}(hhhj5)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj(ubh)}(hdevh]hdev}(hhhjB)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}(hhhj^)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[)ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj`)modnameN classnameNjajd)}jg]j#)c.devm_kvasprintfasbuh1hhjW)ubj9)}(h h]h }(hhhj|)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjW)ubh)}(hgfph]hgfp}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj(ubj$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhj)hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj)ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj)}(hcharh]hchar}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj9)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubj~)}(hjh]h*}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj)ubh)}(hfmth]hfmt}(hhhj)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}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj*modnameN classnameNjajd)}jg]j#)c.devm_kvasprintfasbuh1hhj)ubj9)}(h h]h }(hhhj!*hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj)ubh)}(haph]hap}(hhhj/*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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj(hhubj)}(hhh]j6)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hj\*hjZ*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjW*hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jr*j3jr*j4uh1hhhhjhNhNubjl)}(hXO**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](j6)}(h**Parameters**h]jv)}(hj|*h]h Parameters}(hhhj~*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjz*ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjv*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}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj*ubj)}(hhh]j6)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*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}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj*ubj)}(hhh]j6)}(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*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj +ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj+ubj)}(hhh]j6)}(h The printf()-style format stringh]h The printf()-style format string}(hj)+hj'+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#+hMhj$+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj#+hMhj*ubj)}(h/``va_list ap`` Arguments for the format string h](j)}(h``va_list ap``h]j<)}(hjG+h]h va_list ap}(hhhjI+hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjE+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjA+ubj)}(hhh]j6)}(hArguments for the format stringh]hArguments for the format string}(hjb+hj`+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\+hMhj]+ubah}(h]h ]h"]h$]h&]uh1jhjA+ubeh}(h]h ]h"]h$]h&]uh1jhj\+hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjv*ubj6)}(h **Return**h]jv)}(hj+h]hReturn}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjv*ubj6)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjv*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kasprintf (C function)c.devm_kasprintfhNtauh1hhjhhhNhNubh)}(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}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj+hhhj+hMubj~)}(hjh]h*}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj+hhhj+hMubh)}(hdevm_kasprintfh]h)}(hdevm_kasprintfh]hdevm_kasprintf}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(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}(hhhj,hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj ,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ,ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj/,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1,modnameN classnameNjajd)}jg]jj)}j]j+sbc.devm_kasprintfasbuh1hhj ,ubj9)}(h h]h }(hhhjO,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj ,ubj~)}(hjh]h*}(hhhj],hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ,ubh)}(hdevh]hdev}(hhhjj,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}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj,modnameN classnameNjajd)}jg]jK,c.devm_kasprintfasbuh1hhj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubh)}(hgfph]hgfp}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ,ubj$)}(hconst char *fmth](j')}(hjn'h]hconst}(hhhj,hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj)}(hcharh]hchar}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj,ubj~)}(hjh]h*}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,ubh)}(hfmth]hfmt}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj ,ubj$)}(h...h]j~)}(hjh]h...}(hhhj(-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$-ubah}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj+hhubj)}(hhh]j6)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hjT-hjR-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjO-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj-j3jj-j4uh1hhhhjhNhNubjl)}(hXH**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](j6)}(h**Parameters**h]jv)}(hjt-h]h Parameters}(hhhjv-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr-ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjn-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}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj-ubj)}(hhh]j6)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-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}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj-ubj)}(hhh]j6)}(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-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./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}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj.ubj)}(hhh]j6)}(h The printf()-style format stringh]h The printf()-style format string}(hj!.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj-ubj)}(h(``...`` Arguments for the format string h](j)}(h``...``h]j<)}(hj?.h]h...}(hhhjA.hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj=.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj9.ubj)}(hhh]j6)}(hArguments for the format stringh]hArguments for the format string}(hjZ.hjX.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjT.hMhjU.ubah}(h]h ]h"]h$]h&]uh1jhj9.ubeh}(h]h ]h"]h$]h&]uh1jhjT.hMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjn-ubj6)}(h **Return**h]jv)}(hjz.h]hReturn}(hhhj|.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjx.ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjn-ubj6)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjn-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kfree (C function) c.devm_kfreehNtauh1hhjhhhNhNubh)}(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}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMubj9)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.hhhj.hMubh)}(h devm_kfreeh]h)}(h devm_kfreeh]h devm_kfree}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj.hMubj)}(h#(struct device *dev, const void *p)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj.hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj.ubj9)}(h h]h }(hhhj /hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj/modnameN classnameNjajd)}jg]jj)}j]j.sb c.devm_kfreeasbuh1hhj.ubj9)}(h h]h }(hhhj:/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj.ubj~)}(hjh]h*}(hhhjH/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj.ubh)}(hdevh]hdev}(hhhjU/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj.ubj$)}(h const void *ph](j')}(hjn'h]hconst}(hhhjn/hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjj/ubj9)}(h h]h }(hhhj{/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjj/ubj)}(hvoidh]hvoid}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj/ubj9)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjj/ubj~)}(hjh]h*}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjj/ubh)}(hjh]hp}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj/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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj.hhubj)}(hhh]j6)}(hResource-managed kfreeh]hResource-managed kfree}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhjhNhNubjl)}(h**Parameters** ``struct device *dev`` Device this memory belongs to ``const void *p`` Memory to free **Description** Free memory allocated with devm_kmalloc().h](j6)}(h**Parameters**h]jv)}(hj/h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj/ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]j<)}(hj0h]hstruct device *dev}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj0ubj)}(hhh]j6)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj80hj60hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj20hMhj30ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj20hMhj0ubj)}(h!``const void *p`` Memory to free h](j)}(h``const void *p``h]j<)}(hjV0h]h const void *p}(hhhjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjT0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhjP0ubj)}(hhh]j6)}(hMemory to freeh]hMemory to free}(hjq0hjo0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjk0hMhjl0ubah}(h]h ]h"]h$]h&]uh1jhjP0ubeh}(h]h ]h"]h$]h&]uh1jhjk0hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhj/ubj6)}(h**Description**h]jv)}(hj0h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj/ubj6)}(h*Free memory allocated with devm_kmalloc().h]h*Free memory allocated with devm_kmalloc().}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kmemdup (C function)c.devm_kmemduphNtauh1hhjhhhNhNubh)}(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}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM.ubj9)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj0hhhj0hM.ubj~)}(hjh]h*}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0hhhj0hM.ubh)}(h devm_kmemduph]h)}(h devm_kmemduph]h devm_kmemdup}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj0hM.ubj)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhj 1hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj1ubj9)}(h h]h }(hhhj-1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj>1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;1ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj@1modnameN classnameNjajd)}jg]jj)}j]j1sbc.devm_kmemdupasbuh1hhj1ubj9)}(h h]h }(hhhj^1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubj~)}(hjh]h*}(hhhjl1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1ubh)}(hdevh]hdev}(hhhjy1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubj$)}(hconst void *srch](j')}(hjn'h]hconst}(hhhj1hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hj1ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubj)}(hvoidh]hvoid}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj9)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubj~)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1ubh)}(hsrch]hsrc}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubj$)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj1modnameN classnameNjajd)}jg]jZ1c.devm_kmemdupasbuh1hhj1ubj9)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj1ubh)}(hlenh]hlen}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hj1ubj$)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj:2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj72ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj<2modnameN classnameNjajd)}jg]jZ1c.devm_kmemdupasbuh1hhj32ubj9)}(h h]h }(hhhjX2hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj32ubh)}(hgfph]hgfp}(hhhjf2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj32ubeh}(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&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM5hj0hhubj)}(hhh]j6)}(hResource-managed kmemduph]hResource-managed kmemdup}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM-hj2hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hM.ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2j3j2j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM1hj2ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]j<)}(hj2h]hstruct device *dev}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM.hj2ubj)}(hhh]j6)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hM.hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM.hj2ubj)}(h/``const void *src`` Memory region to duplicate h](j)}(h``const void *src``h]j<)}(hj 3h]hconst void *src}(hhhj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj 3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM/hj3ubj)}(hhh]j6)}(hMemory region to duplicateh]hMemory region to duplicate}(hj&3hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 3hM/hj!3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj 3hM/hj2ubj)}(h$``size_t len`` Memory region length h](j)}(h``size_t len``h]j<)}(hjD3h]h size_t len}(hhhjF3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjB3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM0hj>3ubj)}(hhh]j6)}(hMemory region lengthh]hMemory region length}(hj_3hj]3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjY3hM0hjZ3ubah}(h]h ]h"]h$]h&]uh1jhj>3ubeh}(h]h ]h"]h$]h&]uh1jhjY3hM0hj2ubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]j<)}(hj}3h]h gfp_t gfp}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM1hjw3ubj)}(hhh]j6)}(hGFP mask to useh]hGFP mask to use}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM1hj3ubah}(h]h ]h"]h$]h&]uh1jhjw3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM1hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hj3h]h Description}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM3hj2ubj6)}(h;Duplicate region of a memory using resource managed kmalloch]h;Duplicate region of a memory using resource managed kmalloc}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM3hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_get_free_pages (C function)c.devm_get_free_pageshNtauh1hhjhhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMWubj9)}(h h]h }(hhhj 4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3hhhj 4hMWubj)}(hlongh]hlong}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj 4hMWubj9)}(h h]h }(hhhj(4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj3hhhj 4hMWubh)}(hdevm_get_free_pagesh]h)}(hdevm_get_free_pagesh]hdevm_get_free_pages}(hhhj:4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj64ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj 4hMWubj)}(h8(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j$)}(hstruct device *devh](j')}(hj*h]hstruct}(hhhjV4hhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjR4ubj9)}(h h]h }(hhhjc4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjR4ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjt4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetjv4modnameN classnameNjajd)}jg]jj)}j]j<4sbc.devm_get_free_pagesasbuh1hhjR4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hjR4ubj~)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjR4ubh)}(hdevh]hdev}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjN4ubj$)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypej] reftargetj4modnameN classnameNjajd)}jg]j4c.devm_get_free_pagesasbuh1hhj4ubj9)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj4ubh)}(hgfp_maskh]hgfp_mask}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjN4ubj$)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5ubj9)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj 5ubj)}(hinth]hint}(hhhj,5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5ubj9)}(h h]h }(hhhj:5hhhNhNubah}(h]h ]jEah"]h$]h&]uh1j8hj 5ubh)}(horderh]horder}(hhhjH5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j#hjN4ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhj 4hMWubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj 4hMWubah}(h]j3ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMahj3hhubj)}(hhh]j6)}(h!Resource-managed __get_free_pagesh]h!Resource-managed __get_free_pages}(hju5hjs5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMVhjp5hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj 4hMWubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhjhNhNubjl)}(hXn**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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMZhj5ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j<)}(hj5h]hstruct device *dev}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMWhj5ubj)}(hhh]j6)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hMWhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMWhj5ubj)}(h(``gfp_t gfp_mask`` Allocation gfp flags h](j)}(h``gfp_t gfp_mask``h]j<)}(hj5h]hgfp_t gfp_mask}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMXhj5ubj)}(hhh]j6)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMXhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMXhj5ubj)}(h=``unsigned int order`` Allocation size is (1 << order) pages h](j)}(h``unsigned int order``h]j<)}(hj&6h]hunsigned int order}(hhhj(6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chMYhj 6ubj)}(hhh]j6)}(h%Allocation size is (1 << order) pagesh]h%Allocation size is (1 << order) pages}(hjA6hj?6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;6hMYhj<6ubah}(h]h ]h"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]uh1jhj;6hMYhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hja6h]h Description}(hhhjc6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_6ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM[hj5ubj6)}(heManaged get_free_pages. Memory allocated with this function is automatically freed on driver detach.h]heManaged get_free_pages. Memory allocated with this function is automatically freed on driver detach.}(hjy6hjw6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM[hj5ubj6)}(h **Return**h]jv)}(hj6h]hReturn}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM^hj5ubj6)}(h5Address of allocated memory on success, 0 on failure.h]h5Address of allocated memory on success, 0 on failure.}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:128: ./drivers/base/devres.chM`hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_free_pages (C function)c.devm_free_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void devm_free_pages (struct device *dev, unsigned long addr)h]h)}(hje>j?j?j]AjbAjCjCjEjEjGjHjKjKjMjMjQjQjKUjPUj7YjcjCcjdjdjj=fjZfj_fjgjgjJijOijjjjjljljvmj{mjojojpjpj;rj@rjsjsjQujVujvjvjyxj~xjyjyjzjzj{j{j%}j*}jP~jU~j{jjjjсjցjbjgjjjjjojtjj j3j8jޒjjfjkjjjBjGj`jejjjj jjjjjojtjjjjjjjSjXjjjjjhjmj9j>j jjۺjjнjսjjj&j+jjjjjljqjVj[jjjNjSjjj~jjjjjjnjsjjjjjjjjjjjjj jjkjpjjj1j6jjj$jjjjCjHjjjjjjjjjHjMjjjgjljjj% j* jZ j_ jojtj=jBjjjjjGjLjejjjjjjj;"j@"jfj$j$j$j 'j'j(j(j,*j1*j+j+jI-jN-j.j.jk1jp1ji3jn3j5j5j7j7j9j9j;j;j=j"=j>j>jNAjSAjCjCjEjEjGjGjIjIjKjKjDMjIMjeOjjOjRj"Rj,Tj1TjVjVj3Xj8Xj+Zj0Zj\\ja\jQ_jV_jajajdjdjjfjfjfjkjjpjjmjmjojojfrjkrjtjtjvjvjxjxj{j{j~j"~jjjj j1j6j4j9jjj}jjQjVjjjTjYjȒj͒jjjojjjܙjjjjϝjԝj"j'jjjܤjjĦjɦjjjcjhj jj4j9jkjpjϱjԱj^jcjjjjjָj۸j.j3jajfj jjjjCjHj jjjjjjjjHjMjjjujzjjjBjGjjj?jDjj!jjjWj\jjjjjCjjjjXj]jjj jjjjjjj"j4j9jjjDjIjjjjjj"jqjvjjIjfjkjEjJj#j(jS jX j j jjjj!jrjwjjjj#jtjyjjj j%jv!j{!j#j#j&j&je(jj(j*j*j-j-jg/jl/j1j1j4j4ji6jn6j,8j18j:j:j;j;j=j=j?j?jZAj_Aj0Cj5CjEj EjFjFjHjHjuJjzJjKLjPLj!Nj&NjOjOjQjQjSjSjyUj~UjOWjTWjYjYj[j[j>^jC^j`j`jbjbj-ej2ejgjgjijij/lj4ljnjnjpjpjsj#sjtujyujwjwj zj%zjc|jh|j~j~jjjejjjjjjjCjHjjjˎjЎjjjjjjjwj|jjjϠjԠjjj'j,jjjjjjjjjzjjjjhjmjejjjjjjjjjjjjjjjjjjjQjVjjj#j(jjjj jjjjjjj jjjjjjYj^jjjQjVjjjIjNjjjAjFjjjjjijnjRjWj;j@j$j)j jjjj j j j j j jtjyj]jbjFjKj/j4jjjjjjjjj)j.j!j!j!$j&$j&j&j)j)jo+jt+j-j-jg0jl0j2j2j_5jd5j7j7j1:j6:j<j<j)?j.?jAjAjCjDjwFj|FjHjHjoKjtKjMjMjUPjZPjRjRj)Uj.UjWjWjZjZj]j]j`jaj#dj(djugjzgjjjjjnjnjkqjpqjsjsjujujwjwjmzjrzj|j|jjj jj@jEjjjjjjŒjڎjߎjjjےjjjjjjjj\jajjjj j^jcjjj jj`jejjj jjOjTjjjjjQjVjjjjjSjXjjjjjjjjjnjsjDjIjjjjjjjjjrjwj5j:j jjjjjjjjcjhj9j>jjjjj(j-j~jjjj*j/jjjjjjjojtjjjj j^jcjjj jj`jejjjjjO jT j j jjjQjVjjjjjj"jajfjLjQj7!j*je-jj-j0j0j3j3j46j96j+8j08j":j':j<j<j?j?jAjAjCjDjFjFjJjJj4Lj9LjQNjVNjnPjsPj~RjRj\TjaTj:Vj?VjjXjoXjZjZj\j\j3_j8_jajajcjcj5fj:fjhjhjjjjj7mjjCjjjjjjjjjjjj jjj{jj j j j jjjjjjjjjjj$j)jgjljjj9!j>!j#j#j1&j6&j(j(j)+j.+j-j-j!0j&0j2j2j4j4jo7jt7j9j9jg<jl<j>j>j_AjdAjCjCjWFj\FjHjHjJjJjLjLjhNjmNjQPjVPj:Rj?Rj#Tj(Tj VjVjWjWjYjYj[j[j]j]js_jx_j\ajaajEcjJcj.ej3ejgjgjijijjjjj?mjDmjojoj7rjjjjݸjj/j4jjj jjjjjjjj jjjj!j&jVj[jjjjjjjjjjjjjjjjj/j4jrjwjjjj#jtjyjjj j%jvj{jjj"j'jejjjjjjjgjljjj j ji jn jjjjjjjjjjjZj_j0j5jj jjjjj!j!jK#jP#j!%j&%j&j&j(j(j*j*jy,j~,jO.jT.j%0j*0j1j2j>4jC4j6j6j8j8j@;jE;j=j=j?j?j/Bj4BjDjDjFjFj1Ij6IjtKjyKjMjMj Pj%PjvRj{RjTjTjWjWjeYjjYj[j[j^j^jg`jl`jbjbjdjdj3gj8gjwij|ijbljgljMojRoj8rj=rj#uj(ujOxjTxj{{j{j~j~jӁj؁jJjOjAjFj8j=jjj&j+jjjjjjj-j2jJjOjgjljjjjjjjjjTjYjjjjj{jjjjjjjjjj3j8jjjjjqjvjjjj j*j/jjjjjjjYj^j!j&jjjjjjjjjjjjj jjEjJjjjjjFjKjQjVjjjjj&j+jjjRjWj{jjjjBjGjjj=jjj jjj@jEjjjjjIjNjjjVj[jjjK jP jJ jO jnjsjjjjjNjSj=jBj,j1jjj#j #j%j%j(j(j+j+j.j.j0j0j3j3j6j6j8j8j;j;u 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]j6)}(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.}(hhhjG>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjD>ubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKXsourceW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.huh1jB>hjubatransform_messages] transformerN include_log] decorationNhhub.