sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/basicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/pt_BR/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h Driver Basicsh]h Driver Basics}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/basics.rsthKubh)}(hhh](h)}(hDriver Entry and Exit pointsh]hDriver Entry and Exit points}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlemodule_init (C macro) c.module_inithNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h module_inith]hdesc_signature_line)}(h module_inith]h desc_name)}(h module_inith]h desc_sig_name)}(hhh]h module_init}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKRubah}(h]h ]h"]h$]h&]jj add_permalinkuh1hsphinx_line_type declaratorhhhhhjhKRubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhjhKRhhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hhhhhjhKRubeh}(h]h ](cmacroeh"]h$]h&]domainjAobjtypejBdesctypejBnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh paragraph)}(h``module_init (x)``h]hliteral)}(hjPh]hmodule_init (x)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThhhhubh block_quote)}(h"driver initialization entry point h]jM)}(h!driver initialization entry pointh]h!driver initialization entry point}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKRhjjubah}(h]h ]h"]h$]h&]uh1jhhj|hKRhhhhubh 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](jM)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKVhjubhdefinition_list)}(hhh]hdefinition_list_item)}(hA``x`` function to be run at kernel boot time or module insertion h](hterm)}(h``x``h]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKShjubh definition)}(hhh]jM)}(h:function to be run at kernel boot time or module insertionh]h:function to be run at kernel boot time or module insertion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKUhjubjM)}(hmodule_init() will either be called during do_initcalls() (if builtin) or at module insertion time (if a module). There can only be one per module.h]hmodule_init() will either be called during do_initcalls() (if builtin) or at module insertion time (if a module). There can only be one per module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmodule_exit (C macro) c.module_exithNtauh1hhhhhhNhNubh)}(hhh](h)}(h module_exith]h)}(h module_exith]h)}(h module_exith]j)}(hj.h]h module_exit}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK\ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjKhK\ubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhK\hj)hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj)hhhjKhK\ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhhhNhNubjM)}(h``module_exit (x)``h]jS)}(hjjh]hmodule_exit (x)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hhhhubji)}(hdriver exit entry point h]jM)}(hdriver exit entry pointh]hdriver exit entry point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK\hjubah}(h]h ]h"]h$]h&]uh1jhhjhK\hhhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK]hjubj)}(hhh]jM)}(h)function to be run when driver is removedh]h)function to be run when driver is removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK_hjubjM)}(hmodule_exit() will wrap the driver clean-up code with cleanup_module() when used with rmmod when the driver is a module. If the driver is statically compiled into the kernel, module_exit() has no effect. There can only be one per module.h]hmodule_exit() will wrap the driver clean-up code with cleanup_module() when used with rmmod when the driver is a module. If the driver is statically compiled into the kernel, module_exit() has no effect. There can only be one per module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hklp_modinfo (C struct) c.klp_modinfohNtauh1hhhhhhNhNubh)}(hhh](h)}(h klp_modinfoh]h)}(hstruct klp_modinfoh](hdesc_sig_keyword)}(hstructh]hstruct}(hj@hhhNhNubah}(h]h ]kah"]h$]h&]uh1j>hj:hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKgubhdesc_sig_space)}(h h]h }(hjRhhhNhNubah}(h]h ]wah"]h$]h&]uh1jPhj:hhhjOhKgubh)}(h klp_modinfoh]j)}(hj8h]h klp_modinfo}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjOhKgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhjOhKgubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhKghj3hhubj4)}(hhh]jM)}(h3ELF information preserved from the livepatch moduleh]h3ELF information preserved from the livepatch module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhjOhKgubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhhhNhNubj)}(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](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubh literal_block)}(hostruct klp_modinfo { Elf_Ehdr hdr; Elf_Shdr *sechdrs; char *secstrings; unsigned int symndx; };h]hostruct klp_modinfo { Elf_Ehdr hdr; Elf_Shdr *sechdrs; char *secstrings; unsigned int symndx; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hjh]hhdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]jM)}(h ELF headerh]h ELF header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h!``sechdrs`` Section header table h](j)}(h ``sechdrs``h]jS)}(hj/h]hsechdrs}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhj)ubj)}(hhh]jM)}(hSection header tableh]hSection header table}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(h4``secstrings`` String table for the section headers h](j)}(h``secstrings``h]jS)}(hjhh]h secstrings}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjbubj)}(hhh]jM)}(h$String table for the section headersh]h$String table for the section headers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubj)}(h)``symndx`` The symbol table section indexh](j)}(h ``symndx``h]jS)}(hjh]hsymndx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]jM)}(hThe symbol table section indexh]hThe symbol table section index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htry_module_get (C function)c.try_module_gethNtauh1hhhhhhNhNubh)}(hhh](h)}(h+bool try_module_get (struct module *module)h]h)}(h*bool try_module_get(struct module *module)h](hdesc_sig_keyword_type)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(htry_module_geth]j)}(htry_module_geth]htry_module_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubhdesc_parameterlist)}(h(struct module *module)h]hdesc_parameter)}(hstruct module *moduleh](j?)}(hjBh]hstruct}(hj?hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj;ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubh)}(hhh]j)}(hmoduleh]hmodule}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftype identifier reftargetj_modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jx ASTIdentifier)}jsj!sbc.try_module_getasbuh1hhj;ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj;ubj)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(h3take module refcount unless module is being removedh]h3take module refcount unless module is being removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhhhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hjh]hstruct module *module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhj ubj)}(hhh]jM)}(hthe module we should check forh]hthe module we should check for}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubjM)}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubjM)}(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:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/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]jM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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]jM)}(hXImplied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs's active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops.h]hXImplied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs’s active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/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&]enumtypearabicprefixhsuffix)uh1j~hjubjM)}(hOne of the real values to try_module_get() is the module_is_live() check which ensures that the caller of try_module_get() can yield to userspace module removal requests and gracefully fail if the module is on its way out.h]hOne of the real values to try_module_get() is the module_is_live() check which ensures that the caller of try_module_get() can yield to userspace module removal requests and gracefully fail if the module is on its way out.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubjM)}(hAReturns true if the reference count was successfully incremented.h]hAReturns true if the reference count was successfully incremented.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmodule_put (C function) c.module_puthNtauh1hhhhhhNhNubh)}(hhh](h)}(h'void module_put (struct module *module)h]h)}(h&void module_put(struct module *module)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h module_puth]j)}(h module_puth]h module_put}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct module *module)h]j:)}(hstruct module *moduleh](j?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(hmoduleh]hmodule}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]j)}jsj#sb c.module_putasbuh1hhj9ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%release a reference count to a moduleh]h%release a reference count to a module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhhhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hjh]hstruct module *module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]jM)}(h2the module we should release a reference count forh]h2the module we should release a reference count for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubjM)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]driver-entry-and-exit-pointsah ]h"]driver entry and exit pointsah$]h&]uh1hhhhhhhhKubh)}(hhh]h)}(hDriver device tableh]hDriver device table}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphhhhhK ubah}(h]driver-device-tableah ]h"]driver device tableah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Delaying and scheduling routinesh]h Delaying and scheduling routines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hprev_cputime (C struct)c.prev_cputimehNtauh1hhjhhhNhNubh)}(hhh](h)}(h prev_cputimeh]h)}(hstruct prev_cputimeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h prev_cputimeh]j)}(hjh]h prev_cputime}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h#snapshot of system and user cputimeh]h#snapshot of system and user cputime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhj 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; };}hj2 sbah}(h]h ]h"]h$]h&]jjuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMjhj ubjM)}(h **Members**h]j)}(hjC h]hMembers}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMrhj ubj)}(hhh](j)}(h"``utime`` time spent in user mode h](j)}(h ``utime``h]jS)}(hjb h]hutime}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj` ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMfhj\ ubj)}(hhh]jM)}(htime spent in user modeh]htime spent in user mode}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjw hMfhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hMfhjY ubj)}(h$``stime`` time spent in system mode h](j)}(h ``stime``h]jS)}(hj h]hstime}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj ubj)}(hhh]jM)}(htime spent in system modeh]htime spent in system mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMghj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMghjY ubj)}(h&``lock`` protects the above two fieldsh](j)}(h``lock``h]jS)}(hj h]hlock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj ubj)}(hhh]jM)}(hprotects the above two fieldsh]hprotects the above two fields}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMghjY ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMkhjhhubjM)}(hPStores previous user/system time values such that we can guarantee monotonicity.h]hPStores previous user/system time values such that we can guarantee monotonicity.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(__task_lazy_mmu_mode_active (C function)c.__task_lazy_mmu_mode_activehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:bool __task_lazy_mmu_mode_active (struct task_struct *tsk)h]h)}(h9bool __task_lazy_mmu_mode_active(struct task_struct *tsk)h](j)}(hjh]hbool}(hjU hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hjc hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQ hhhjb hMubh)}(h__task_lazy_mmu_mode_activeh]j)}(h__task_lazy_mmu_mode_activeh]h__task_lazy_mmu_mode_active}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQ hhhjb hMubj4)}(h(struct task_struct *tsk)h]j:)}(hstruct task_struct *tskh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(h task_structh]h task_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjw sbc.__task_lazy_mmu_mode_activeasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(htskh]htsk}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjQ hhhjb hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjM hhhjb hMubah}(h]jH ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjb hMhjJ hhubj4)}(hhh]jM)}(h(Test the lazy MMU mode state for a task.h]h(Test the lazy MMU mode state for a task.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjJ hhhjb hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj, jHj, jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct task_struct *tsk`` The task to check. **Description** Test whether **tsk** has its lazy MMU mode state set to active (i.e. enabled and not paused). This function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead. This function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h](jM)}(h**Parameters**h]j)}(hj6 h]h Parameters}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4 ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj0 ubj)}(hhh]j)}(h/``struct task_struct *tsk`` The task to check. h](j)}(h``struct task_struct *tsk``h]jS)}(hjU h]hstruct task_struct *tsk}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjO ubj)}(hhh]jM)}(hThe task to check.h]hThe task to check.}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjj hMhjk ubah}(h]h ]h"]h$]h&]uh1jhjO ubeh}(h]h ]h"]h$]h&]uh1jhjj hMhjL ubah}(h]h ]h"]h$]h&]uh1jhj0 ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj0 ubjM)}(h]Test whether **tsk** has its lazy MMU mode state set to active (i.e. enabled and not paused).h](h Test whether }(hj hhhNhNubj)}(h**tsk**h]htsk}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhI has its lazy MMU mode state set to active (i.e. enabled and not paused).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj0 ubjM)}(hThis function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead.h]hThis function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj0 ubjM)}(hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h]hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj0 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$is_lazy_mmu_mode_active (C function)c.is_lazy_mmu_mode_activehNtauh1hhjhhhNhNubh)}(hhh](h)}(h#bool is_lazy_mmu_mode_active (void)h]h)}(h"bool is_lazy_mmu_mode_active(void)h](j)}(hjh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(his_lazy_mmu_mode_activeh]j)}(his_lazy_mmu_mode_activeh]his_lazy_mmu_mode_active}(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj! ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj9 ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(h/Test whether we are currently in lazy MMU mode.h]h/Test whether we are currently in lazy MMU mode.}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjh hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hXP**Parameters** ``void`` no arguments **Description** Test whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current task This function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj h]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKhj ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKhj ubjM)}(hTest whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current taskh]hTest whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current task}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj ubjM)}(hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h]hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!set_cpus_allowed_ptr (C function)c.set_cpus_allowed_ptrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hPint set_cpus_allowed_ptr (struct task_struct *p, const struct cpumask *new_mask)h]h)}(hOint set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)h](j)}(hinth]hint}(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7 hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM|ubjQ)}(h h]h }(hjJ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7 hhhjI hM|ubh)}(hset_cpus_allowed_ptrh]j)}(hset_cpus_allowed_ptrh]hset_cpus_allowed_ptr}(hj\ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7 hhhjI hM|ubj4)}(h7(struct task_struct *p, const struct cpumask *new_mask)h](j:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjx hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjt ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt ubh)}(hhh]j)}(h task_structh]h task_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj^ sbc.set_cpus_allowed_ptrasbuh1hhjt ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubj)}(hjh]hp}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjp ubj:)}(hconst struct cpumask *new_maskh](j?)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hcpumaskh]hcpumask}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j c.set_cpus_allowed_ptrasbuh1hhj ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnew_maskh]hnew_mask}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjp ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7 hhhjI hM|ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3 hhhjI hM|ubah}(h]j. ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjI hM|hj0 hhubj4)}(hhh]jM)}(hset CPU affinity mask of a taskh]hset CPU affinity mask of a task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM|hjhhubah}(h]h ]h"]h$]h&]uh1j3hj0 hhhjI hM|ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubj)}(hhh](j)}(h#``struct task_struct *p`` the task h](j)}(h``struct task_struct *p``h]jS)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM}hjubj)}(hhh]jM)}(hthe taskh]hthe task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(h5``const struct cpumask *new_mask`` CPU affinity mask h](j)}(h"``const struct cpumask *new_mask``h]jS)}(hjh]hconst struct cpumask *new_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM~hjubj)}(hhh]jM)}(hCPU affinity maskh]hCPU affinity mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubjM)}(h,zero if successful, or a negative error codeh]h,zero if successful, or a negative error code}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htask_nice (C function) c.task_nicehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhjhMubh)}(h task_niceh]j)}(h task_niceh]h task_nice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhjhMubj4)}(h(const struct task_struct *p)h]j:)}(hconst struct task_struct *ph](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.task_niceasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj|hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhjhMubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjuhhubj4)}(hhh]jM)}(h&return the nice value of a given task.h]h&return the nice value of a given task.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(hy**Parameters** ``const struct task_struct *p`` the task in question. **Return** The nice value [ -20 ... 0 ... 19 ].h](jM)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjvubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]jS)}(hjh]hconst struct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubj)}(hhh]jM)}(hthe task in question.h]hthe task in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjvubjM)}(h$The nice value [ -20 ... 0 ... 19 ].h]h$The nice value [ -20 ... 0 ... 19 ].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_idle_task (C function)c.is_idle_taskhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj(hMubh)}(h is_idle_taskh]j)}(h is_idle_taskh]h is_idle_task}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj(hMubj4)}(h(const struct task_struct *p)h]j:)}(hconst struct task_struct *ph](j?)}(hj h]hconst}(hjWhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjSubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj?)}(hjBh]hstruct}(hjrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj=sbc.is_idle_taskasbuh1hhjSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj(hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMhjhhubj4)}(hhh]jM)}(h#is the specified task an idle task?h]h#is the specified task an idle task?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(h}**Parameters** ``const struct task_struct *p`` the task in question. **Return** 1 if **p** is an idle task. 0 otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]jS)}(hj5h]hconst struct task_struct *p}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj/ubj)}(hhh]jM)}(hthe task in question.h]hthe task in question.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubjM)}(h(1 if **p** is an idle task. 0 otherwise.h](h1 if }(hjhhhNhNubj)}(h**p**h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is an idle task. 0 otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwake_up_process (C function)c.wake_up_processhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hwake_up_processh]j)}(hwake_up_processh]hwake_up_process}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct task_struct *p)h]j:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjsbc.wake_up_processasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hWake up a specific processh]hWake up a specific process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXI**Parameters** ``struct task_struct *p`` The process to be woken up. **Description** Attempt to wake up the nominated process and move it to the set of runnable processes. This function executes a full memory barrier before accessing the task state. **Return** 1 if the process was woken up, 0 if it was already running.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubj)}(hhh]j)}(h6``struct task_struct *p`` The process to be woken up. h](j)}(h``struct task_struct *p``h]jS)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubj)}(hhh]jM)}(hThe process to be woken up.h]hThe process to be woken up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubjM)}(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'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubjM)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&preempt_notifier_register (C function)c.preempt_notifier_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid preempt_notifier_register (struct preempt_notifier *notifier)h]h)}(hAvoid preempt_notifier_register(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjhMubh)}(hpreempt_notifier_registerh]j)}(hpreempt_notifier_registerh]hpreempt_notifier_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjhMubj4)}(h#(struct preempt_notifier *notifier)h]j:)}(h!struct preempt_notifier *notifierh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hpreempt_notifierh]hpreempt_notifier}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.preempt_notifier_registerasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnotifierh]hnotifier}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhjhMubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjrhhubj4)}(hhh]jM)}(h5tell me when current is being preempted & rescheduledh]h5tell me when current is being preempted & rescheduled}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(hS**Parameters** ``struct preempt_notifier *notifier`` notifier struct to registerh](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjYubj)}(hhh]j)}(hA``struct preempt_notifier *notifier`` notifier struct to registerh](j)}(h%``struct preempt_notifier *notifier``h]jS)}(hj~h]h!struct preempt_notifier *notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjxubj)}(hhh]jM)}(hnotifier struct to registerh]hnotifier struct to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(preempt_notifier_unregister (C function)c.preempt_notifier_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDvoid preempt_notifier_unregister (struct preempt_notifier *notifier)h]h)}(hCvoid preempt_notifier_unregister(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hpreempt_notifier_unregisterh]j)}(hpreempt_notifier_unregisterh]hpreempt_notifier_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h#(struct preempt_notifier *notifier)h]j:)}(h!struct preempt_notifier *notifierh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hpreempt_notifierh]hpreempt_notifier}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsjsbc.preempt_notifier_unregisterasbuh1hhjubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnotifierh]hnotifier}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h0no longer interested in preemption notificationsh]h0no longer interested in preemption notifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct preempt_notifier *notifier`` notifier struct to unregister **Description** This is *not* safe to call from within a preemption notifier.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubj)}(hhh]j)}(hD``struct preempt_notifier *notifier`` notifier struct to unregister h](j)}(h%``struct preempt_notifier *notifier``h]jS)}(hjh]h!struct preempt_notifier *notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubj)}(hhh]jM)}(hnotifier struct to unregisterh]hnotifier struct to unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubjM)}(h=This is *not* safe to call from within a preemption notifier.h](hThis is }(hj*hhhNhNubhemphasis)}(h*not*h]hnot}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj*ubh0 safe to call from within a preemption notifier.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%preempt_schedule_notrace (C function)c.preempt_schedule_notracehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6__visible void notrace preempt_schedule_notrace (void)h]h)}(h5__visible void notrace preempt_schedule_notrace(void)h](h __visible}(hjihhhNhNubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM(ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjhM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjhM(ubhnotrace}(hjihhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjhM(ubh)}(hpreempt_schedule_notraceh]j)}(hpreempt_schedule_notraceh]hpreempt_schedule_notrace}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhjhM(ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjihhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhjhM(ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjbhhubj4)}(hhh]jM)}(h"preempt_schedule called by tracingh]h"preempt_schedule called by tracing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXS**Parameters** ``void`` no arguments **Description** The tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode. To prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM,hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj9h]hvoid}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhj3ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM)hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h cpupri_find_fitness (C function)c.cpupri_find_fitnesshNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hcpupri_find_fitnessh]j)}(hcpupri_find_fitnessh]hcpupri_find_fitness}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hcpuprih]hcpupri}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsjsbc.cpupri_find_fitnessasbuh1hhjubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcph]hcp}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjwhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j?c.cpupri_find_fitnessasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct cpumask *lowest_maskh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hcpumaskh]hcpumask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j?c.cpupri_find_fitnessasbuh1hhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h lowest_maskh]h lowest_mask}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h2bool (*fitness_fn)(struct task_struct *p, int cpu)h](j)}(hjh]hbool}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(h(h]h(}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h fitness_fnh]h fitness_fn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j?c.cpupri_find_fitnessasbuh1hhjRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]hp}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h,h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hcpuh]hcpu}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h)}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h,find the best (lowest-pri) CPU in the systemh]h,find the best (lowest-pri) CPU in the system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]jS)}(hjh]hstruct cpupri *cp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h#``struct task_struct *p`` The task h](j)}(h``struct task_struct *p``h]jS)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh]jM)}(hThe taskh]hThe task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hO``struct cpumask *lowest_mask`` A mask to fill in with selected CPUs (or NULL) h](j)}(h``struct cpumask *lowest_mask``h]jS)}(hj:h]hstruct cpumask *lowest_mask}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj4ubj)}(hhh]jM)}(h.A mask to fill in with selected CPUs (or NULL)h]h.A mask to fill in with selected CPUs (or NULL)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjubj)}(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]jS)}(hjsh]h2bool (*fitness_fn)(struct task_struct *p, int cpu)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjmubj)}(hhh]jM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubjM)}(h(int)bool - CPUs were foundh]h(int)bool - CPUs were found}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_set (C function) c.cpupri_sethNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj)hKubh)}(h cpupri_seth]j)}(h cpupri_seth]h cpupri_set}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj)hKubj4)}(h((struct cpupri *cp, int cpu, int newpri)h](j:)}(hstruct cpupri *cph](j?)}(hjBh]hstruct}(hjXhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]j)}(hcpuprih]hcpupri}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]j)}jsj>sb c.cpupri_setasbuh1hhjTubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hcph]hcp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(h int newprih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewprih]hnewpri}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj)hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj)hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hKhjhhubj4)}(hhh]jM)}(hupdate the CPU priority settingh]hupdate the CPU priority setting}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjBhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj)hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjaubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]jS)}(hjh]hstruct cpupri *cp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubj)}(h``int cpu`` The target CPU h](j)}(h ``int cpu``h]jS)}(hjh]hint cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh]jM)}(hThe target CPUh]hThe target CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubj)}(hS``int newpri`` The priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU h](j)}(h``int newpri``h]jS)}(hjh]h int newpri}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjubj)}(hhh]jM)}(hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPUh]hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h**Note**h]j)}(hj3h]hNote}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjaubjM)}(h#Assumes cpu_rq(cpu)->lock is lockedh]h#Assumes cpu_rq(cpu)->lock is locked}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjaubjM)}(h **Return**h]j)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjaubjM)}(h(void)h]h(void)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_init (C function) c.cpupri_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(h#int cpupri_init (struct cpupri *cp)h]h)}(h"int cpupri_init(struct cpupri *cp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h cpupri_inith]j)}(h cpupri_inith]h cpupri_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct cpupri *cp)h]j:)}(hstruct cpupri *cph](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hcpuprih]hcpupri}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.cpupri_initasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcph]hcp}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hinitialize the cpupri structureh]hinitialize the cpupri structure}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj\ hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw jHjw jIjJjKuh1hhhhjhNhNubj)}(hm**Parameters** ``struct cpupri *cp`` The cpupri context **Return** -ENOMEM on memory allocation failure.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hj h]hstruct cpupri *cp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj ubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj{ ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj{ ubjM)}(h%-ENOMEM on memory allocation failure.h]h%-ENOMEM on memory allocation failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj{ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_cleanup (C function)c.cpupri_cleanuphNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void cpupri_cleanup (struct cpupri *cp)h]h)}(h&void cpupri_cleanup(struct cpupri *cp)h](j)}(hvoidh]hvoid}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3ubjQ)}(h h]h }(hj/!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj.!hM3ubh)}(hcpupri_cleanuph]j)}(hcpupri_cleanuph]hcpupri_cleanup}(hjA!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj.!hM3ubj4)}(h(struct cpupri *cp)h]j:)}(hstruct cpupri *cph](j?)}(hjBh]hstruct}(hj]!hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjY!ubjQ)}(h h]h }(hjj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY!ubh)}(hhh]j)}(hcpuprih]hcpupri}(hj{!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}!modnameN classnameNjwjz)}j}]j)}jsjC!sbc.cpupri_cleanupasbuh1hhjY!ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY!ubj)}(hcph]hcp}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjU!ubah}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj.!hM3ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj.!hM3ubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.!hM3hj!hhubj4)}(hhh]jM)}(hclean up the cpupri structureh]hclean up the cpupri structure}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3hj!hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj.!hM3ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(h:**Parameters** ``struct cpupri *cp`` The cpupri contexth](jM)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM7hj!ubj)}(hhh]j)}(h(``struct cpupri *cp`` The cpupri contexth](j)}(h``struct cpupri *cp``h]jS)}(hj!"h]hstruct cpupri *cp}(hj#"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM9hj"ubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM4hj7"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj6"hM9hj"ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_tg_load_avg (C function)c.update_tg_load_avghNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void update_tg_load_avg (struct cfs_rq *cfs_rq)h]h)}(h.void update_tg_load_avg(struct cfs_rq *cfs_rq)h](j)}(hvoidh]hvoid}(hj{"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw"hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMbubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw"hhhj"hMbubh)}(hupdate_tg_load_avgh]j)}(hupdate_tg_load_avgh]hupdate_tg_load_avg}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjw"hhhj"hMbubj4)}(h(struct cfs_rq *cfs_rq)h]j:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]j)}jsj"sbc.update_tg_load_avgasbuh1hhj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hcfs_rqh]hcfs_rq}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubah}(h]h ]h"]h$]h&]jjuh1j3hjw"hhhj"hMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjs"hhhj"hMbubah}(h]jn"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"hMbhjp"hhubj4)}(hhh]jM)}(hupdate the tg's load avgh]hupdate the tg’s load avg}(hj;#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMbhj8#hhubah}(h]h ]h"]h$]h&]uh1j3hjp"hhhj"hMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjS#jHjS#jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj]#h]h Parameters}(hj_#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[#ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMfhjW#ubj)}(hhh]j)}(h7``struct cfs_rq *cfs_rq`` the cfs_rq whose avg changed h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hj|#h]hstruct cfs_rq *cfs_rq}(hj~#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjz#ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMchjv#ubj)}(hhh]jM)}(hthe cfs_rq whose avg changedh]hthe cfs_rq whose avg changed}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMchj#ubah}(h]h ]h"]h$]h&]uh1jhjv#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMchjs#ubah}(h]h ]h"]h$]h&]uh1jhjW#ubjM)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMehjW#ubjM)}(hThis function 'ensures': tg->load_avg := \Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations.h]hThis function ‘ensures’: tg->load_avg := Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMdhjW#ubjM)}(hIn order to avoid having to look at the other cfs_rq's, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is 'small'.h]hIn order to avoid having to look at the other cfs_rq’s, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is ‘small’.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhhjW#ubjM)}(h>Updating tg's load_avg is necessary before update_cfs_share().h]h@Updating tg’s load_avg is necessary before update_cfs_share().}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMlhjW#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#update_cfs_rq_load_avg (C function)c.update_cfs_rq_load_avghNtauh1hhjhhhNhNubh)}(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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM2ubjQ)}(h h]h }(hj)$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj($hM2ubh)}(hupdate_cfs_rq_load_avgh]j)}(hupdate_cfs_rq_load_avgh]hupdate_cfs_rq_load_avg}(hj;$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj($hM2ubj4)}(h (u64 now, struct cfs_rq *cfs_rq)h](j:)}(hu64 nowh](h)}(hhh]j)}(hu64h]hu64}(hjZ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\$modnameN classnameNjwjz)}j}]j)}jsj=$sbc.update_cfs_rq_load_avgasbuh1hhjS$ubjQ)}(h h]h }(hjz$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjS$ubj)}(hnowh]hnow}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjO$ubj:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]jv$c.update_cfs_rq_load_avgasbuh1hhj$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hcfs_rqh]hcfs_rq}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjO$ubeh}(h]h ]h"]h$]h&]jjuh1j3hj$hhhj($hM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhj($hM2ubah}(h]j $ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj($hM2hj$hhubj4)}(hhh]jM)}(h&update the cfs_rq's load/util averagesh]h(update the cfs_rq’s load/util averages}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM2hj%hhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj($hM2ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:%jHj:%jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjD%h]h Parameters}(hjF%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB%ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM6hj>%ubj)}(hhh](j)}(h5``u64 now`` current time, as per cfs_rq_clock_pelt() h](j)}(h ``u64 now``h]jS)}(hjc%h]hu64 now}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja%ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM3hj]%ubj)}(hhh]jM)}(h(current time, as per cfs_rq_clock_pelt()h]h(current time, as per cfs_rq_clock_pelt()}(hj|%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx%hM3hjy%ubah}(h]h ]h"]h$]h&]uh1jhj]%ubeh}(h]h ]h"]h$]h&]uh1jhjx%hM3hjZ%ubj)}(h+``struct cfs_rq *cfs_rq`` cfs_rq to update h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hj%h]hstruct cfs_rq *cfs_rq}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM4hj%ubj)}(hhh]jM)}(hcfs_rq to updateh]hcfs_rq to update}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hM4hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM4hjZ%ubeh}(h]h ]h"]h$]h&]uh1jhj>%ubjM)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM6hj>%ubjM)}(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%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM5hj>%ubjM)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM8hj>%ubjM)}(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 &hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM;hj>%ubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>hj>%ubjM)}(h,true if the load decayed or we removed load.h]h,true if the load decayed or we removed load.}(hj2&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM;hj>%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#attach_entity_load_avg (C function)c.attach_entity_load_avghNtauh1hhjhhhNhNubh)}(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}(hja&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]&hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMmubjQ)}(h h]h }(hjp&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]&hhhjo&hMmubh)}(hattach_entity_load_avgh]j)}(hattach_entity_load_avgh]hattach_entity_load_avg}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]&hhhjo&hMmubj4)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hj&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j)}jsj&sbc.attach_entity_load_avgasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hcfs_rqh]hcfs_rq}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(hstruct sched_entity *seh](j?)}(hjBh]hstruct}(hj'hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj 'ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 'ubh)}(hhh]j)}(h sched_entityh]h sched_entity}(hj.'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0'modnameN classnameNjwjz)}j}]j&c.attach_entity_load_avgasbuh1hhj 'ubjQ)}(h h]h }(hjL'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 'ubj)}(hjh]h*}(hjZ'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'ubj)}(hseh]hse}(hjg'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hj]&hhhjo&hMmubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjY&hhhjo&hMmubah}(h]jT&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjo&hMmhjV&hhubj4)}(hhh]jM)}(h)attach this entity to its cfs_rq load avgh]h)attach this entity to its cfs_rq load avg}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMmhj'hhubah}(h]h ]h"]h$]h&]uh1j3hjV&hhhjo&hMmubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMqhj'ubj)}(hhh](j)}(h.``struct cfs_rq *cfs_rq`` cfs_rq to attach to h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hj'h]hstruct cfs_rq *cfs_rq}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMnhj'ubj)}(hhh]jM)}(hcfs_rq to attach toh]hcfs_rq to attach to}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hMnhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMnhj'ubj)}(h3``struct sched_entity *se`` sched_entity to attach h](j)}(h``struct sched_entity *se``h]jS)}(hj (h]hstruct sched_entity *se}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj (ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMohj(ubj)}(hhh]jM)}(hsched_entity to attachh]hsched_entity to attach}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj (hMohj!(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj (hMohj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubjM)}(h**Description**h]j)}(hjF(h]h Description}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD(ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMqhj'ubjM)}(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.}(hj\(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMphj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#detach_entity_load_avg (C function)c.detach_entity_load_avghNtauh1hhjhhhNhNubh)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj(hMubh)}(hdetach_entity_load_avgh]j)}(hdetach_entity_load_avgh]hdetach_entity_load_avg}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj(hMubj4)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj(sbc.detach_entity_load_avgasbuh1hhj(ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hcfs_rqh]hcfs_rq}(hj!)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hstruct sched_entity *seh](j?)}(hjBh]hstruct}(hj:)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6)ubjQ)}(h h]h }(hjG)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6)ubh)}(hhh]j)}(h sched_entityh]h sched_entity}(hjX)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZ)modnameN classnameNjwjz)}j}]j)c.detach_entity_load_avgasbuh1hhj6)ubjQ)}(h h]h }(hjv)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6)ubj)}(hseh]hse}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj(hhhj(hMubah}(h]j~(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMhj(hhubj4)}(hhh]jM)}(h+detach this entity from its cfs_rq load avgh]h+detach this entity from its cfs_rq load avg}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj)hhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhj(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj)ubj)}(hhh](j)}(h0``struct cfs_rq *cfs_rq`` cfs_rq to detach from h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hj)h]hstruct cfs_rq *cfs_rq}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj)ubj)}(hhh]jM)}(hcfs_rq to detach fromh]hcfs_rq to detach from}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj)ubj)}(h3``struct sched_entity *se`` sched_entity to detach h](j)}(h``struct sched_entity *se``h]jS)}(hj5*h]hstruct sched_entity *se}(hj7*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj/*ubj)}(hhh]jM)}(hsched_entity to detachh]hsched_entity to detach}(hjN*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJ*hMhjK*ubah}(h]h ]h"]h$]h&]uh1jhj/*ubeh}(h]h ]h"]h$]h&]uh1jhjJ*hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hjp*h]h Description}(hjr*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn*ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj)ubjM)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpu_util (C function) c.cpu_utilhNtauh1hhjhhhNhNubh)}(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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj*hM"ubj)}(hlongh]hlong}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hM"ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj*hM"ubh)}(hcpu_utilh]j)}(hcpu_utilh]hcpu_util}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj*hM"ubj4)}(h8(int cpu, struct task_struct *p, int dst_cpu, int boost)h](j:)}(hint cpuh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj +ubj)}(hcpuh]hcpu}(hj*+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjC+hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?+ubjQ)}(h h]h }(hjP+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?+ubh)}(hhh]j)}(h task_structh]h task_struct}(hja+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjc+modnameN classnameNjwjz)}j}]j)}jsj*sb c.cpu_utilasbuh1hhj?+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?+ubj)}(hjh]hp}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(h int dst_cpuh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hdst_cpuh]hdst_cpu}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(h int boosth](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hboosth]hboost}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hj*hhhj*hM"ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj*hM"ubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj*hM"hj*hhubj4)}(hhh]jM)}(h7Estimates the amount of CPU capacity used by CFS tasks.h]h7Estimates the amount of CPU capacity used by CFS tasks.}(hj/,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hj,,hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhj*hM"ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjG,jHjG,jIjJjKuh1hhhhjhNhNubj)}(hX`**Parameters** ``int cpu`` the CPU to get the utilization for ``struct task_struct *p`` task for which the CPU utilization should be predicted or NULL ``int dst_cpu`` CPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULL ``int boost`` 1 to enable boosting, otherwise 0 **Description** The unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity. CPU utilization is the sum of running time of runnable tasks plus the recent utilization of currently non-runnable tasks on that CPU. It represents the amount of CPU capacity currently used by CFS tasks in the range [0..max CPU capacity] with max CPU capacity being the CPU capacity at f_max. The estimated CPU utilization is defined as the maximum between CPU utilization and sum of the estimated utilization of the currently runnable tasks on that CPU. It preserves a utilization "snapshot" of previously-executed tasks, which helps better deduce how busy a CPU will be when a long-sleeping task wakes up. The contribution to CPU utilization of such a task would be significantly decayed at this point of time. Boosted CPU utilization is defined as max(CPU runnable, CPU utilization). CPU contention for CFS tasks can be detected by CPU runnable > CPU utilization. Boosting is implemented in cpu_util() so that internal users (e.g. EAS) can use it next to external users (e.g. schedutil), latter via cpu_util_cfs_boost(). CPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS). **Return** (Boosted) (estimated) utilization for the specified CPU.h](jM)}(h**Parameters**h]j)}(hjQ,h]h Parameters}(hjS,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO,ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubj)}(hhh](j)}(h/``int cpu`` the CPU to get the utilization for h](j)}(h ``int cpu``h]jS)}(hjp,h]hint cpu}(hjr,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjn,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjj,ubj)}(hhh]jM)}(h"the CPU to get the utilization forh]h"the CPU to get the utilization for}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM"hj,ubah}(h]h ]h"]h$]h&]uh1jhjj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM"hjg,ubj)}(hY``struct task_struct *p`` task for which the CPU utilization should be predicted or NULL h](j)}(h``struct task_struct *p``h]jS)}(hj,h]hstruct task_struct *p}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hj,ubj)}(hhh]jM)}(h>task for which the CPU utilization should be predicted or NULLh]h>task for which the CPU utilization should be predicted or NULL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM"hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM"hjg,ubj)}(hW``int dst_cpu`` CPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULL h](j)}(h``int dst_cpu``h]jS)}(hj,h]h int dst_cpu}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hj,ubj)}(hhh]jM)}(hFCPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULLh](hCPU }(hj,hhhNhNubj)}(h**p**h]hp}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh migrates to, -1 if }(hj,hhhNhNubj)}(h**p**h]hp}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh moves from }(hj,hhhNhNubj)}(h**cpu**h]hcpu}(hj'-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh or }(hj,hhhNhNubj)}(h**p**h]hp}(hj9-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh == NULL}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj,hM"hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM"hjg,ubj)}(h0``int boost`` 1 to enable boosting, otherwise 0 h](j)}(h ``int boost``h]jS)}(hjc-h]h int boost}(hje-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hj]-ubj)}(hhh]jM)}(h!1 to enable boosting, otherwise 0h]h!1 to enable boosting, otherwise 0}(hj|-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx-hM"hjy-ubah}(h]h ]h"]h$]h&]uh1jhj]-ubeh}(h]h ]h"]h$]h&]uh1jhjx-hM"hjg,ubeh}(h]h ]h"]h$]h&]uh1jhjK,ubjM)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(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-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(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-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(hXVCPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS).h]hXVCPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS).}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjK,ubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#hjK,ubjM)}(h8(Boosted) (estimated) utilization for the specified CPU.h]h8(Boosted) (estimated) utilization for the specified CPU.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#hjK,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sched_use_asym_prio (C function)c.sched_use_asym_priohNtauh1hhjhhhNhNubh)}(hhh](h)}(h;bool sched_use_asym_prio (struct sched_domain *sd, int cpu)h]h)}(h:bool sched_use_asym_prio(struct sched_domain *sd, int cpu)h](j)}(hjh]hbool}(hjF.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB.hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#-ubjQ)}(h h]h }(hjT.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB.hhhjS.hM#-ubh)}(hsched_use_asym_prioh]j)}(hsched_use_asym_prioh]hsched_use_asym_prio}(hjf.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjB.hhhjS.hM#-ubj4)}(h"(struct sched_domain *sd, int cpu)h](j:)}(hstruct sched_domain *sdh](j?)}(hjBh]hstruct}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj~.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~.ubh)}(hhh]j)}(h sched_domainh]h sched_domain}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j)}jsjh.sbc.sched_use_asym_prioasbuh1hhj~.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~.ubj)}(hsdh]hsd}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjz.ubj:)}(hint cpuh](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hcpuh]hcpu}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjz.ubeh}(h]h ]h"]h$]h&]jjuh1j3hjB.hhhjS.hM#-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>.hhhjS.hM#-ubah}(h]j9.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjS.hM#-hj;.hhubj4)}(hhh]jM)}(h0Check whether asym_packing priority must be usedh]h0Check whether asym_packing priority must be used}(hj:/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#-hj7/hhubah}(h]h ]h"]h$]h&]uh1j3hj;.hhhjS.hM#-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjR/jHjR/jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct sched_domain *sd`` The scheduling domain of the load balancing ``int cpu`` A CPU **Description** Always use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that **cpu** is idle. Only use CPU priority if the whole core is idle. **Return** True if the priority of **cpu** must be followed. False otherwise.h](jM)}(h**Parameters**h]j)}(hj\/h]h Parameters}(hj^/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ/ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM'-hjV/ubj)}(hhh](j)}(hH``struct sched_domain *sd`` The scheduling domain of the load balancing h](j)}(h``struct sched_domain *sd``h]jS)}(hj{/h]hstruct sched_domain *sd}(hj}/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjy/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$-hju/ubj)}(hhh]jM)}(h+The scheduling domain of the load balancingh]h+The scheduling domain of the load balancing}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hM$-hj/ubah}(h]h ]h"]h$]h&]uh1jhju/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM$-hjr/ubj)}(h``int cpu`` A CPU h](j)}(h ``int cpu``h]jS)}(hj/h]hint cpu}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM%-hj/ubj)}(hhh]jM)}(hA CPUh]hA CPU}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hM%-hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM%-hjr/ubeh}(h]h ]h"]h$]h&]uh1jhjV/ubjM)}(h**Description**h]j)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM'-hjV/ubjM)}(hAlways use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that **cpu** is idle. Only use CPU priority if the whole core is idle.h](hAlways use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that }(hj0hhhNhNubj)}(h**cpu**h]hcpu}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh: is idle. Only use CPU priority if the whole core is idle.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&-hjV/ubjM)}(h **Return**h]j)}(hj(0h]hReturn}(hj*0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*-hjV/ubjM)}(hBTrue if the priority of **cpu** must be followed. False otherwise.h](hTrue if the priority of }(hj>0hhhNhNubj)}(h**cpu**h]hcpu}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>0ubh# must be followed. False otherwise.}(hj>0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+-hjV/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsched_group_asym (C function)c.sched_group_asymhNtauh1hhjhhhNhNubh)}(hhh](h)}(h^bool sched_group_asym (struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h]h)}(h]bool sched_group_asym(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j)}(hjh]hbool}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMC-ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{0hhhj0hMC-ubh)}(hsched_group_asymh]j)}(hsched_group_asymh]hsched_group_asym}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{0hhhj0hMC-ubj4)}(hH(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj0hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubh)}(hhh]j)}(hlb_envh]hlb_env}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsj0sbc.sched_group_asymasbuh1hhj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(henvh]henv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(hstruct sg_lb_stats *sgsh](j?)}(hjBh]hstruct}(hj-1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj)1ubjQ)}(h h]h }(hj:1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)1ubh)}(hhh]j)}(h sg_lb_statsh]h sg_lb_stats}(hjK1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjM1modnameN classnameNjwjz)}j}]j0c.sched_group_asymasbuh1hhj)1ubjQ)}(h h]h }(hji1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)1ubj)}(hjh]h*}(hjw1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubj)}(hsgsh]hsgs}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(hstruct sched_group *grouph](j?)}(hjBh]hstruct}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(h sched_grouph]h sched_group}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j0c.sched_group_asymasbuh1hhj1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hgrouph]hgroup}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hj{0hhhj0hMC-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjw0hhhj0hMC-ubah}(h]jr0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMC-hjt0hhubj4)}(hhh]jM)}(h8Check if the destination CPU can do asym_packing balanceh]h8Check if the destination CPU can do asym_packing balance}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMC-hj2hhubah}(h]h ]h"]h$]h&]uh1j3hjt0hhhj0hMC-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj62jHj62jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct lb_env *env`` The load balancing environment ``struct sg_lb_stats *sgs`` Load-balancing statistics of the candidate busiest group ``struct sched_group *group`` The candidate busiest group **Description** **env**::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of **group**. **Return** true if **env**::dst_cpu can do with asym_packing load balance. False otherwise.h](jM)}(h**Parameters**h]j)}(hj@2h]h Parameters}(hjB2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>2ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMG-hj:2ubj)}(hhh](j)}(h6``struct lb_env *env`` The load balancing environment h](j)}(h``struct lb_env *env``h]jS)}(hj_2h]hstruct lb_env *env}(hja2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMD-hjY2ubj)}(hhh]jM)}(hThe load balancing environmenth]hThe load balancing environment}(hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjt2hMD-hju2ubah}(h]h ]h"]h$]h&]uh1jhjY2ubeh}(h]h ]h"]h$]h&]uh1jhjt2hMD-hjV2ubj)}(hU``struct sg_lb_stats *sgs`` Load-balancing statistics of the candidate busiest group h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hj2h]hstruct sg_lb_stats *sgs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chME-hj2ubj)}(hhh]jM)}(h8Load-balancing statistics of the candidate busiest grouph]h8Load-balancing statistics of the candidate busiest group}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hME-hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hME-hjV2ubj)}(h:``struct sched_group *group`` The candidate busiest group h](j)}(h``struct sched_group *group``h]jS)}(hj2h]hstruct sched_group *group}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMF-hj2ubj)}(hhh]jM)}(hThe candidate busiest grouph]hThe candidate busiest group}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMF-hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMF-hjV2ubeh}(h]h ]h"]h$]h&]uh1jhj:2ubjM)}(h**Description**h]j)}(hj 3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 3ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMH-hj:2ubjM)}(hc**env**::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of **group**.h](j)}(h**env**h]henv}(hj&3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"3ubhR::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of }(hj"3hhhNhNubj)}(h **group**h]hgroup}(hj83hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"3ubh.}(hj"3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMG-hj:2ubjM)}(h **Return**h]j)}(hjS3h]hReturn}(hjU3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ3ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMJ-hj:2ubjM)}(hPtrue if **env**::dst_cpu can do with asym_packing load balance. False otherwise.h](htrue if }(hji3hhhNhNubj)}(h**env**h]henv}(hjq3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji3ubhA::dst_cpu can do with asym_packing load balance. False otherwise.}(hji3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMK-hj:2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_sg_lb_stats (C function)c.update_sg_lb_statshNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid update_sg_lb_stats (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded)h]h)}(hvoid update_sg_lb_stats(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hM.ubh)}(hupdate_sg_lb_statsh]j)}(hupdate_sg_lb_statsh]hupdate_sg_lb_stats}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hM.ubj4)}(hv(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubh)}(hhh]j)}(hlb_envh]hlb_env}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsj3sbc.update_sg_lb_statsasbuh1hhj3ubjQ)}(h h]h }(hj%4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hj34hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(henvh]henv}(hj@4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hjY4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjU4ubjQ)}(h h]h }(hjf4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU4ubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hjw4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjy4modnameN classnameNjwjz)}j}]j!4c.update_sg_lb_statsasbuh1hhjU4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU4ubj)}(hsdsh]hsds}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(hstruct sched_group *grouph](j?)}(hjBh]hstruct}(hj4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]j)}(h sched_grouph]h sched_group}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j!4c.update_sg_lb_statsasbuh1hhj4ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hgrouph]hgroup}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(hstruct sg_lb_stats *sgsh](j?)}(hjBh]hstruct}(hj95hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj55ubjQ)}(h h]h }(hjF5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj55ubh)}(hhh]j)}(h sg_lb_statsh]h sg_lb_stats}(hjW5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjY5modnameN classnameNjwjz)}j}]j!4c.update_sg_lb_statsasbuh1hhj55ubjQ)}(h h]h }(hju5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj55ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj55ubj)}(hsgsh]hsgs}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj55ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(hbool *sg_overloadedh](j)}(hjh]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h sg_overloadedh]h sg_overloaded}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj3hM.ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj3hM.ubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hM.hj3hhubj4)}(hhh]jM)}(h3Update sched_group's statistics for load balancing.h]h5Update sched_group’s statistics for load balancing.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj5hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hM.ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(hXt**Parameters** ``struct lb_env *env`` The load balancing environment. ``struct sd_lb_stats *sds`` Load-balancing data with statistics of the local group. ``struct sched_group *group`` sched_group whose statistics are to be updated. ``struct sg_lb_stats *sgs`` variable to hold the statistics for this group. ``bool *sg_overloaded`` sched_group is overloadedh](jM)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj6ubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hj<6h]hstruct lb_env *env}(hj>6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:6ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj66ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hjU6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQ6hM.hjR6ubah}(h]h ]h"]h$]h&]uh1jhj66ubeh}(h]h ]h"]h$]h&]uh1jhjQ6hM.hj36ubj)}(hT``struct sd_lb_stats *sds`` Load-balancing data with statistics of the local group. h](j)}(h``struct sd_lb_stats *sds``h]jS)}(hju6h]hstruct sd_lb_stats *sds}(hjw6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjs6ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hjo6ubj)}(hhh]jM)}(h7Load-balancing data with statistics of the local group.h]h7Load-balancing data with statistics of the local group.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM.hj6ubah}(h]h ]h"]h$]h&]uh1jhjo6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM.hj36ubj)}(hN``struct sched_group *group`` sched_group whose statistics are to be updated. h](j)}(h``struct sched_group *group``h]jS)}(hj6h]hstruct sched_group *group}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj6ubj)}(hhh]jM)}(h/sched_group whose statistics are to be updated.h]h/sched_group whose statistics are to be updated.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM.hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM.hj36ubj)}(hL``struct sg_lb_stats *sgs`` variable to hold the statistics for this group. h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hj6h]hstruct sg_lb_stats *sgs}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj6ubj)}(hhh]jM)}(h/variable to hold the statistics for this group.h]h/variable to hold the statistics for this group.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM.hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM.hj36ubj)}(h1``bool *sg_overloaded`` sched_group is overloadedh](j)}(h``bool *sg_overloaded``h]jS)}(hj 7h]hbool *sg_overloaded}(hj"7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj7ubj)}(hhh]jM)}(hsched_group is overloadedh]hsched_group is overloaded}(hj97hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj67ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj57hM.hj36ubeh}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#update_sd_pick_busiest (C function)c.update_sd_pick_busiesthNtauh1hhjhhhNhNubh)}(hhh](h)}(hzbool update_sd_pick_busiest (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h]h)}(hybool update_sd_pick_busiest(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h](j)}(hjh]hbool}(hjz7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv7hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv7hhhj7hM.ubh)}(hupdate_sd_pick_busiesth]j)}(hupdate_sd_pick_busiesth]hupdate_sd_pick_busiest}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjv7hhhj7hM.ubj4)}(h^(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubh)}(hhh]j)}(hlb_envh]hlb_env}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsj7sbc.update_sd_pick_busiestasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(henvh]henv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hj(8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj$8ubjQ)}(h h]h }(hj58hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$8ubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hjF8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjH8modnameN classnameNjwjz)}j}]j7c.update_sd_pick_busiestasbuh1hhj$8ubjQ)}(h h]h }(hjd8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$8ubj)}(hjh]h*}(hjr8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$8ubj)}(hsdsh]hsds}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hstruct sched_group *sgh](j?)}(hjBh]hstruct}(hj8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubh)}(hhh]j)}(h sched_grouph]h sched_group}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j7c.update_sd_pick_busiestasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hsgh]hsg}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hstruct sg_lb_stats *sgsh](j?)}(hjBh]hstruct}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(h sg_lb_statsh]h sg_lb_stats}(hj&9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(9modnameN classnameNjwjz)}j}]j7c.update_sd_pick_busiestasbuh1hhj9ubjQ)}(h h]h }(hjD9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjR9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hsgsh]hsgs}(hj_9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hjv7hhhj7hM.ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjr7hhhj7hM.ubah}(h]jm7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hM.hjo7hhubj4)}(hhh]jM)}(hreturn 1 on busiest grouph]hreturn 1 on busiest group}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9hhubah}(h]h ]h"]h$]h&]uh1j3hjo7hhhj7hM.ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct lb_env *env`` The load balancing environment. ``struct sd_lb_stats *sds`` sched_domain statistics ``struct sched_group *sg`` sched_group candidate to be checked for being the busiest ``struct sg_lb_stats *sgs`` sched_group statistics **Description** Determine if **sg** is a busier group than the previously selected busiest group. **Return** ``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](jM)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hj9h]hstruct lb_env *env}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM.hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM.hj9ubj)}(h4``struct sd_lb_stats *sds`` sched_domain statistics h](j)}(h``struct sd_lb_stats *sds``h]jS)}(hj:h]hstruct sd_lb_stats *sds}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubj)}(hhh]jM)}(hsched_domain statisticsh]hsched_domain statistics}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM.hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hM.hj9ubj)}(hU``struct sched_group *sg`` sched_group candidate to be checked for being the busiest h](j)}(h``struct sched_group *sg``h]jS)}(hj<:h]hstruct sched_group *sg}(hj>:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj::ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj6:ubj)}(hhh]jM)}(h9sched_group candidate to be checked for being the busiesth]h9sched_group candidate to be checked for being the busiest}(hjU:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQ:hM.hjR:ubah}(h]h ]h"]h$]h&]uh1jhj6:ubeh}(h]h ]h"]h$]h&]uh1jhjQ:hM.hj9ubj)}(h3``struct sg_lb_stats *sgs`` sched_group statistics h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hju:h]hstruct sg_lb_stats *sgs}(hjw:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjs:ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hjo:ubj)}(hhh]jM)}(hsched_group statisticsh]hsched_group statistics}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM.hj:ubah}(h]h ]h"]h$]h&]uh1jhjo:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM.hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubjM)}(hQDetermine if **sg** is a busier group than the previously selected busiest group.h](h Determine if }(hj:hhhNhNubj)}(h**sg**h]hsg}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh> is a busier group than the previously selected busiest group.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubjM)}(h **Return**h]j)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubjM)}(he``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](jS)}(h``true``h]htrue}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubh if }(hj:hhhNhNubj)}(h**sg**h]hsg}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh? is a busier group than the previously selected busiest group. }(hj:hhhNhNubjS)}(h ``false``h]hfalse}(hj';hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubh otherwise.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hidle_cpu_without (C function)c.idle_cpu_withouthNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int idle_cpu_without (int cpu, struct task_struct *p)h]h)}(h4int idle_cpu_without(int cpu, struct task_struct *p)h](j)}(hinth]hint}(hj`;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\;hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMS/ubjQ)}(h h]h }(hjo;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\;hhhjn;hMS/ubh)}(hidle_cpu_withouth]j)}(hidle_cpu_withouth]hidle_cpu_without}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj};ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\;hhhjn;hMS/ubj4)}(h (int cpu, struct task_struct *p)h](j:)}(hint cpuh](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hcpuh]hcpu}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubj:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hj;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubh)}(hhh]j)}(h task_structh]h task_struct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsj;sbc.idle_cpu_withoutasbuh1hhj;ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]hp}(hj+<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubeh}(h]h ]h"]h$]h&]jjuh1j3hj\;hhhjn;hMS/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjX;hhhjn;hMS/ubah}(h]jS;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjn;hMS/hjU;hhubj4)}(hhh]jM)}(h%would a given CPU be idle without p ?h]h%would a given CPU be idle without p ?}(hjT<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMS/hjQ<hhubah}(h]h ]h"]h$]h&]uh1j3hjU;hhhjn;hMS/ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjl<jHjl<jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int cpu`` the processor on which idleness is tested. ``struct task_struct *p`` task which should be ignored. **Return** 1 if the CPU would be idle. 0 otherwise.h](jM)}(h**Parameters**h]j)}(hjv<h]h Parameters}(hjx<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt<ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMW/hjp<ubj)}(hhh](j)}(h7``int cpu`` the processor on which idleness is tested. h](j)}(h ``int cpu``h]jS)}(hj<h]hint cpu}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMT/hj<ubj)}(hhh]jM)}(h*the processor on which idleness is tested.h]h*the processor on which idleness is tested.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMT/hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMT/hj<ubj)}(h8``struct task_struct *p`` task which should be ignored. h](j)}(h``struct task_struct *p``h]jS)}(hj<h]hstruct task_struct *p}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMU/hj<ubj)}(hhh]jM)}(htask which should be ignored.h]htask which should be ignored.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMU/hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMU/hj<ubeh}(h]h ]h"]h$]h&]uh1jhjp<ubjM)}(h **Return**h]j)}(hj =h]hReturn}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMW/hjp<ubjM)}(h(1 if the CPU would be idle. 0 otherwise.h]h(1 if the CPU would be idle. 0 otherwise.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMW/hjp<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_sd_lb_stats (C function)c.update_sd_lb_statshNtauh1hhjhhhNhNubh)}(hhh](h)}(hEvoid update_sd_lb_stats (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hDvoid update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hjN=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ=hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0ubjQ)}(h h]h }(hj]=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ=hhhj\=hM0ubh)}(hupdate_sd_lb_statsh]j)}(hupdate_sd_lb_statsh]hupdate_sd_lb_stats}(hjo=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJ=hhhj\=hM0ubj4)}(h-(struct lb_env *env, struct sd_lb_stats *sds)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(hlb_envh]hlb_env}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjq=sbc.update_sd_lb_statsasbuh1hhj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(henvh]henv}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hj >hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j=c.update_sd_lb_statsasbuh1hhj=ubjQ)}(h h]h }(hj9>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hjG>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hsdsh]hsds}(hjT>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjJ=hhhj\=hM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjF=hhhj\=hM0ubah}(h]jA=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\=hM0NhjC=hhubj4)}(hhh]jM)}(h4Update sched_domain's statistics for load balancing.h]h6Update sched_domain’s statistics for load balancing.}(hj~>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0hj{>hhubah}(h]h ]h"]h$]h&]uh1j3hjC=hhhj\=hM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct lb_env *env`` The load balancing environment. ``struct sd_lb_stats *sds`` variable to hold the statistics for this sched_domain.h](jM)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0hj>ubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hj>h]hstruct lb_env *env}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0hj>ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hM0hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM0hj>ubj)}(hR``struct sd_lb_stats *sds`` variable to hold the statistics for this sched_domain.h](j)}(h``struct sd_lb_stats *sds``h]jS)}(hj>h]hstruct sd_lb_stats *sds}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0hj>ubj)}(hhh]jM)}(h6variable to hold the statistics for this sched_domain.h]h6variable to hold the statistics for this sched_domain.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM0hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj ?hM0hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h calculate_imbalance (C function)c.calculate_imbalancehNtauh1hhjhhhNhNubh)}(hhh](h)}(hFvoid calculate_imbalance (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hEvoid calculate_imbalance(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hjR?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN?hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1ubjQ)}(h h]h }(hja?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjN?hhhj`?hM1ubh)}(hcalculate_imbalanceh]j)}(hcalculate_imbalanceh]hcalculate_imbalance}(hjs?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjN?hhhj`?hM1ubj4)}(h-(struct lb_env *env, struct sd_lb_stats *sds)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj?hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubh)}(hhh]j)}(hlb_envh]hlb_env}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsju?sbc.calculate_imbalanceasbuh1hhj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(henvh]henv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?ubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!@modnameN classnameNjwjz)}j}]j?c.calculate_imbalanceasbuh1hhj?ubjQ)}(h h]h }(hj=@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hjK@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hsdsh]hsds}(hjX@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?ubeh}(h]h ]h"]h$]h&]jjuh1j3hjN?hhhj`?hM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJ?hhhj`?hM1ubah}(h]jE?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`?hM1hjG?hhubj4)}(hhh]jM)}(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.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hj@hhubah}(h]h ]h"]h$]h&]uh1j3hjG?hhhj`?hM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hj@ubj)}(hhh](j)}(h0``struct lb_env *env`` load balance environment h](j)}(h``struct lb_env *env``h]jS)}(hj@h]hstruct lb_env *env}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hj@ubj)}(hhh]jM)}(hload balance environmenth]hload balance environment}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM1hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM1hj@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]jS)}(hj@h]hstruct sd_lb_stats *sds}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hj@ubj)}(hhh]jM)}(hCstatistics of the sched_domain whose imbalance is to be calculated.h]hCstatistics of the sched_domain whose imbalance is to be calculated.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhM1hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)sched_balance_find_src_group (C function)c.sched_balance_find_src_grouphNtauh1hhjhhhNhNubh)}(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?)}(hjBh]hstruct}(hjVAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRAhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1ubjQ)}(h h]h }(hjdAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRAhhhjcAhM1ubh)}(hhh]j)}(h sched_grouph]h sched_group}(hjuAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwAmodnameN classnameNjwjz)}j}]j)}jssched_balance_find_src_groupsbc.sched_balance_find_src_groupasbuh1hhjRAhhhjcAhM1ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRAhhhjcAhM1ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRAhhhjcAhM1ubh)}(hsched_balance_find_src_grouph]j)}(hjAh]hsched_balance_find_src_group}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRAhhhjcAhM1ubj4)}(h(struct lb_env *env)h]j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hjAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubh)}(hhh]j)}(hlb_envh]hlb_env}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]jAc.sched_balance_find_src_groupasbuh1hhjAubjQ)}(h h]h }(hj BhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(henvh]henv}(hj'BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubah}(h]h ]h"]h$]h&]jjuh1j3hjRAhhhjcAhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNAhhhjcAhM1ubah}(h]jIAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjcAhM1hjKAhhubj4)}(hhh]jM)}(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.}(hjQBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjNBhhubah}(h]h ]h"]h$]h&]uh1j3hjKAhhhjcAhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjiBjHjiBjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjsBh]h Parameters}(hjuBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqBubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjmBubj)}(hhh]j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hjBh]hstruct lb_env *env}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjBubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM1hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM1hjBubah}(h]h ]h"]h$]h&]uh1jhjmBubjM)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjmBubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjmBubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjmBubh bullet_list)}(hhh]j)}(h&The busiest group if imbalance exists.h]jM)}(hjCh]h&The busiest group if imbalance exists.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1hjCubah}(h]h ]h"]h$]h&]uh1jhj Cubah}(h]h ]h"]h$]h&]bullet-uh1j Chj ChM1hjmBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hDECLARE_COMPLETION (C macro)c.DECLARE_COMPLETIONhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]j)}(hjICh]hDECLARE_COMPLETION}(hjSChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOCubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKChhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGChhhjfChK-ubah}(h]jBCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjfChK-hjDChhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjDChhhjfChK-ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubjM)}(h``DECLARE_COMPLETION (work)``h]jS)}(hjCh]hDECLARE_COMPLETION (work)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hjhhubji)}(h.declare and initialize a completion structure h]jM)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-hjCubah}(h]h ]h"]h$]h&]uh1jhhjChK-hjhhubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK1hjCubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]jS)}(hjCh]hwork}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK.hjCubj)}(hhh]jM)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChK.hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChK.hjCubah}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK0hjCubjM)}(hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.h]hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.}(hj*DhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$DECLARE_COMPLETION_ONSTACK (C macro)c.DECLARE_COMPLETION_ONSTACKhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]j)}(hjSDh]hDECLARE_COMPLETION_ONSTACK}(hj]DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUDhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQDhhhjpDhK=ubah}(h]jLDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjpDhK=hjNDhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjNDhhhjpDhK=ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubjM)}(h%``DECLARE_COMPLETION_ONSTACK (work)``h]jS)}(hjDh]h!DECLARE_COMPLETION_ONSTACK (work)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hjhhubji)}(h.declare and initialize a completion structure h]jM)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=hjDubah}(h]h ]h"]h$]h&]uh1jhhjDhK=hjhhubj)}(h**Parameters** ``work`` identifier for the completion structure **Description** This macro declares and initializes a completion structure on the kernel stack.h](jM)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKAhjDubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]jS)}(hjDh]hwork}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK>hjDubj)}(hhh]jM)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhK>hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhK>hjDubah}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjEh]h Description}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK@hjDubjM)}(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.}(hj4EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinit_completion (C function)c.init_completionhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void init_completion (struct completion *x)h]h)}(h*void init_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hjcEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Ehhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNubjQ)}(h h]h }(hjrEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_EhhhjqEhKNubh)}(hinit_completionh]j)}(hinit_completionh]hinit_completion}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_EhhhjqEhKNubj4)}(h(struct completion *x)h]j:)}(hstruct completion *xh](j?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubh)}(hhh]j)}(h completionh]h completion}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsjEsbc.init_completionasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hxh]hx}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubah}(h]h ]h"]h$]h&]jjuh1j3hj_EhhhjqEhKNubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[EhhhjqEhKNubah}(h]jVEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqEhKNhjXEhhubj4)}(hhh]jM)}(h-Initialize a dynamically allocated completionh]h-Initialize a dynamically allocated completion}(hj#FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNhj Fhhubah}(h]h ]h"]h$]h&]uh1j3hjXEhhhjqEhKNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;FjHj;FjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjEFh]h Parameters}(hjGFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCFubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKRhj?Fubj)}(hhh]j)}(hS``struct completion *x`` pointer to completion structure that is to be initialized h](j)}(h``struct completion *x``h]jS)}(hjdFh]hstruct completion *x}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKOhj^Fubj)}(hhh]jM)}(h9pointer to completion structure that is to be initializedh]h9pointer to completion structure that is to be initialized}(hj}FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyFhKOhjzFubah}(h]h ]h"]h$]h&]uh1jhj^Fubeh}(h]h ]h"]h$]h&]uh1jhjyFhKOhj[Fubah}(h]h ]h"]h$]h&]uh1jhj?FubjM)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKQhj?FubjM)}(hPThis inline function will initialize a dynamically created completion structure.h]hPThis inline function will initialize a dynamically created completion structure.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKPhj?Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hreinit_completion (C function)c.reinit_completionhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void reinit_completion (struct completion *x)h]h)}(h,void reinit_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[ubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjFhK[ubh)}(hreinit_completionh]j)}(hreinit_completionh]hreinit_completion}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjFhK[ubj4)}(h(struct completion *x)h]j:)}(hstruct completion *xh](j?)}(hjBh]hstruct}(hj!GhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjGubjQ)}(h h]h }(hj.GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubh)}(hhh]j)}(h completionh]h completion}(hj?GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=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](jM)}(h**Parameters**h]j)}(hjLJh]h Parameters}(hjNJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJJubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjFJubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjkJh]ha}(hjmJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiJubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKrhjeJubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhKrhjJubah}(h]h ]h"]h$]h&]uh1jhjeJubeh}(h]h ]h"]h$]h&]uh1jhjJhKrhjbJubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hjJh]hb}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKshjJubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhKshjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhKshjbJubeh}(h]h ]h"]h$]h&]uh1jhjFJubjM)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjFJubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKthjFJubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKxhjFJubjM)}(h8``true`` is time a is after time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubh& is time a is after time b, otherwise }(hjKhhhNhNubjS)}(h ``false``h]hfalse}(hj2KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubh.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhjFJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_before (C macro) c.time_beforehNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h time_beforeh]h)}(h time_beforeh]h)}(h time_beforeh]j)}(hjeKh]h time_before}(hjoKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjgKhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjcKhhhjKhKubah}(h]j^Kah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhKhj`Khhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj`KhhhjKhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjSHhNhNubjM)}(h``time_before (a, b)``h]jS)}(hjKh]htime_before (a, b)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjSHhhubji)}(h-returns true if the time a is before time b. h]jM)}(h,returns true if the time a is before time b.h]h,returns true if the time a is before time b.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjKubah}(h]h ]h"]h$]h&]uh1jhhjKhKhjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjKubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjKh]ha}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjKubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj LhKhj Lubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj LhKhjKubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hj.Lh]hb}(hj0LhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,Lubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj(Lubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjGLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjCLhKhjDLubah}(h]h ]h"]h$]h&]uh1jhj(Lubeh}(h]h ]h"]h$]h&]uh1jhjCLhKhjKubeh}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h **Return**h]j)}(hjiLh]hReturn}(hjkLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgLubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjKubjM)}(h9``true`` is time a is before time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubh' is time a is before time b, otherwise }(hjLhhhNhNubjS)}(h ``false``h]hfalse}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_after_eq (C macro)c.time_after_eqhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(h time_after_eqh]j)}(hjLh]h time_after_eq}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjLhKubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhKhjLhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjLhhhjLhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjSHhNhNubjM)}(h``time_after_eq (a, b)``h]jS)}(hjMh]htime_after_eq (a, b)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjSHhhubji)}(h;returns true if the time a is after or the same as time b. h]jM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjMubah}(h]h ]h"]h$]h&]uh1jhhj,MhKhjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hj9Mh]h Parameters}(hj;MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Mubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj3Mubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjXMh]ha}(hjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVMubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjRMubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjqMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmMhKhjnMubah}(h]h ]h"]h$]h&]uh1jhjRMubeh}(h]h ]h"]h$]h&]uh1jhjmMhKhjOMubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hjMh]hb}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjMubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhKhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjOMubeh}(h]h ]h"]h$]h&]uh1jhj3MubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj3MubjM)}(hG``true`` is time a is after or the same as time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh5 is time a is after or the same as time b, otherwise }(hjMhhhNhNubjS)}(h ``false``h]hfalse}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj3Mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_before_eq (C macro)c.time_before_eqhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_before_eqh]h)}(htime_before_eqh]h)}(htime_before_eqh]j)}(hj+Nh]htime_before_eq}(hj5NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Nubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-NhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)NhhhjHNhKubah}(h]j$Nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHNhKhj&Nhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj&NhhhjHNhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjaNjHjaNjIjJjKuh1hhhhjSHhNhNubjM)}(h``time_before_eq (a, b)``h]jS)}(hjgNh]htime_before_eq (a, b)}(hjiNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjSHhhubji)}(hVhKhjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hjKVh]h Parameters}(hjMVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIVubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjEVubj)}(hhh](j)}(h ``a`` first comparable as __u64 h](j)}(h``a``h]jS)}(hjjVh]ha}(hjlVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjdVubj)}(hhh]jM)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjdVubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjaVubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]jS)}(hjVh]hb}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjVubj)}(hhh]jM)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjaVubeh}(h]h ]h"]h$]h&]uh1jhjEVubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjEVubjM)}(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()).}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjEVubjM)}(h **Return**h]j)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjEVubjM)}(hG``true`` is time a is after or the same as time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubh5 is time a is after or the same as time b, otherwise }(hjWhhhNhNubjS)}(h ``false``h]hfalse}(hj1WhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjEVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_before_eq64 (C macro)c.time_before_eq64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_before_eq64h]h)}(htime_before_eq64h]h)}(htime_before_eq64h]j)}(hjdWh]htime_before_eq64}(hjnWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfWhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbWhhhjWhKubah}(h]j]Wah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhKhj_Whhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj_WhhhjWhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjSHhNhNubjM)}(h``time_before_eq64 (a, b)``h]jS)}(hjWh]htime_before_eq64 (a, b)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjSHhhubji)}(h\ubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj]\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjY\hMhjZ\ubah}(h]h ]h"]h$]h&]uh1jhj>\ubeh}(h]h ]h"]h$]h&]uh1jhjY\hMhj;\ubah}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}\ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj\ubjM)}(h=``true`` is time a is before jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubh+ is time a is before jiffies_64, otherwise }(hj\hhhNhNubjS)}(h ``false``h]hfalse}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_is_after_jiffies (C macro)c.time_is_after_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_after_jiffiesh]h)}(htime_is_after_jiffiesh]h)}(htime_is_after_jiffiesh]j)}(hj\h]htime_is_after_jiffies}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhj\hM ubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\hM hj\hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj\hhhj\hM ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjSHhNhNubjM)}(h``time_is_after_jiffies (a)``h]jS)}(hj]h]htime_is_after_jiffies (a)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjSHhhubji)}(h"return true if a is after jiffies h]jM)}(h!return true if a is after jiffiesh]h!return true if a is after jiffies}(hj4]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hj0]ubah}(h]h ]h"]h$]h&]uh1jhhjB]hM hjSHhhubj)}(h**Parameters** ``a`` time (unsigned long) to compare to jiffies **Return** ``true`` is time a is after jiffies, otherwise ``false``.h](jM)}(h**Parameters**h]j)}(hjO]h]h Parameters}(hjQ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM]ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjI]ubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]jS)}(hjn]h]ha}(hjp]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjl]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjh]ubj)}(hhh]jM)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hM hj]ubah}(h]h ]h"]h$]h&]uh1jhjh]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM hje]ubah}(h]h ]h"]h$]h&]uh1jhjI]ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjI]ubjM)}(h9``true`` is time a is after jiffies, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubh' is time a is after jiffies, otherwise }(hj]hhhNhNubjS)}(h ``false``h]hfalse}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjI]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!time_is_after_jiffies64 (C macro)c.time_is_after_jiffies64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]j)}(hj^h]htime_is_after_jiffies64}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj ^hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhj%^hMubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%^hMhj^hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj^hhhj%^hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj>^jHj>^jIjJjKuh1hhhhjSHhNhNubjM)}(h``time_is_after_jiffies64 (a)``h]jS)}(hjD^h]htime_is_after_jiffies64 (a)}(hjF^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjB^ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjSHhhubji)}(h%return true if a is after jiffies_64 h]jM)}(h$return true if a is after jiffies_64h]h$return true if a is after jiffies_64}(hj^^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjZ^ubah}(h]h ]h"]h$]h&]uh1jhhjl^hMhjSHhhubj)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is after jiffies_64, otherwise ``false``.h](jM)}(h**Parameters**h]j)}(hjy^h]h Parameters}(hj{^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw^ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjs^ubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]jS)}(hj^h]ha}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj^ubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjs^ubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjs^ubjM)}(h<``true`` is time a is after jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubh* is time a is after jiffies_64, otherwise }(hj^hhhNhNubjS)}(h ``false``h]hfalse}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjs^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#time_is_before_eq_jiffies (C macro)c.time_is_before_eq_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]j)}(hj2_h]htime_is_before_eq_jiffies}(hj<_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4_hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0_hhhjO_hMubah}(h]j+_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjO_hMhj-_hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj-_hhhjO_hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjh_jHjh_jIjJjKuh1hhhhjSHhNhNubjM)}(h!``time_is_before_eq_jiffies (a)``h]jS)}(hjn_h]htime_is_before_eq_jiffies (a)}(hjp_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjl_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjSHhhubji)}(h/return true if a is before or equal to jiffies h]jM)}(h.return true if a is before or equal to jiffiesh]h.return true if a is before or equal to jiffies}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj_ubah}(h]h ]h"]h$]h&]uh1jhhj_hMhjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj_ubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]jS)}(hj_h]ha}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj_ubj)}(hhh]jM)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubjM)}(h **Return**h]j)}(hj_h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj_ubjM)}(hI``true`` is time a is before or the same as jiffies, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubh7 is time a is before or the same as jiffies, otherwise }(hj`hhhNhNubjS)}(h ``false``h]hfalse}(hj)`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%time_is_before_eq_jiffies64 (C macro)c.time_is_before_eq_jiffies64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]j)}(hj\`h]htime_is_before_eq_jiffies64}(hjf`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^`hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZ`hhhjy`hM"ubah}(h]jU`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjy`hM"hjW`hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjW`hhhjy`hM"ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhjSHhNhNubjM)}(h#``time_is_before_eq_jiffies64 (a)``h]jS)}(hj`h]htime_is_before_eq_jiffies64 (a)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM$hjSHhhubji)}(h2return true if a is before or equal to jiffies_64 h]jM)}(h1return true if a is before or equal to jiffies_64h]h1return true if a is before or equal to jiffies_64}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"hj`ubah}(h]h ]h"]h$]h&]uh1jhhj`hM"hjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhY/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]jS)}(hj`h]ha}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hj`ubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM#hjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjahM#hj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h **Return**h]j)}(hj'ah]hReturn}(hj)ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%aubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM%hj`ubjM)}(hI``true`` is time a is before or the same jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjAahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=aubh7 is time a is before or the same jiffies_64, otherwise }(hj=ahhhNhNubjS)}(h ``false``h]hfalse}(hjSahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=aubh.}(hj=ahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM%hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"time_is_after_eq_jiffies (C macro)c.time_is_after_eq_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]j)}(hjah]htime_is_after_eq_jiffies}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM*ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjahM*ubah}(h]jaah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahM*hjahhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjahhhjahM*ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjSHhNhNubjM)}(h ``time_is_after_eq_jiffies (a)``h]jS)}(hjah]htime_is_after_eq_jiffies (a)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM,hjSHhhubji)}(h.return true if a is after or equal to jiffies h]jM)}(h-return true if a is after or equal to jiffiesh]h-return true if a is after or equal to jiffies}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM*hjaubah}(h]h ]h"]h$]h&]uh1jhhjahM*hjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM.hjaubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]jS)}(hjbh]ha}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM+hjbubj)}(hhh]jM)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj/bhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+bhM+hj,bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj+bhM+hj bubah}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h **Return**h]j)}(hjQbh]hReturn}(hjSbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjObubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM-hjaubjM)}(hH``true`` is time a is after or the same as jiffies, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjkbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgbubh6 is time a is after or the same as jiffies, otherwise }(hjgbhhhNhNubjS)}(h ``false``h]hfalse}(hj}bhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgbubh.}(hjgbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM-hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$time_is_after_eq_jiffies64 (C macro)c.time_is_after_eq_jiffies64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]j)}(hjbh]htime_is_after_eq_jiffies64}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbhhhjbhM1ubah}(h]jbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbhM1hjbhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjbhhhjbhM1ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjSHhNhNubjM)}(h"``time_is_after_eq_jiffies64 (a)``h]jS)}(hjbh]htime_is_after_eq_jiffies64 (a)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM3hjSHhhubji)}(h1return true if a is after or equal to jiffies_64 h]jM)}(h0return true if a is after or equal to jiffies_64h]h0return true if a is after or equal to jiffies_64}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hjcubah}(h]h ]h"]h$]h&]uh1jhhjchM1hjSHhhubj)}(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](jM)}(h**Parameters**h]j)}(hj!ch]h Parameters}(hj#chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjcubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]jS)}(hj@ch]ha}(hjBchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>cubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hj:cubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjYchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUchM2hjVcubah}(h]h ]h"]h$]h&]uh1jhj:cubeh}(h]h ]h"]h$]h&]uh1jhjUchM2hj7cubah}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h **Return**h]j)}(hj{ch]hReturn}(hj}chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjycubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjcubjM)}(hK``true`` is time a is after or the same as jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh9 is time a is after or the same as jiffies_64, otherwise }(hjchhhNhNubjS)}(h ``false``h]hfalse}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjSHhhhNhNubh)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjchMubj)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjchMubjQ)}(h h]h }(hj dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjchMubh)}(hjiffies_to_msecsh]j)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjchMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hj h]hconst}(hj9dhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj5dubjQ)}(h h]h }(hjFdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5dubj)}(hunsignedh]hunsigned}(hjTdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5dubjQ)}(h h]h }(hjbdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5dubj)}(hlongh]hlong}(hjpdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5dubjQ)}(h h]h }(hj~dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5dubj)}(hjh]hj}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5dubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1dubah}(h]h ]h"]h$]h&]jjuh1j3hjchhhjchMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjchMubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchMhjchhubj4)}(hhh]jM)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhjchMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjSHhNhNubj)}(h**Parameters** ``const unsigned long j`` jiffies value **Description** This inline version takes care of HZ in {100,250,1000}. **Return** milliseconds valueh](jM)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjdh]hconst unsigned long j}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj ehMhj eubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj ehMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hj2eh]h Description}(hj4ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0eubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubjM)}(h7This inline version takes care of HZ in {100,250,1000}.h]h7This inline version takes care of HZ in {100,250,1000}.}(hjHehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubjM)}(h **Return**h]j)}(hjYeh]hReturn}(hj[ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWeubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubjM)}(hmilliseconds valueh]hmilliseconds value}(hjoehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjSHhhhNhNubh)}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjehMubj)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjehMubh)}(hjiffies_to_usecsh]j)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjehMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hj h]hconst}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjeubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjQ)}(h h]h }(hj fhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hlongh]hlong}(hj.fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjQ)}(h h]h }(hjhjgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjdh]hj}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~gubah}(h]h ]h"]h$]h&]jjuh1j3hj0ghhhjXghMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,ghhhjXghMubah}(h]j'gah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXghMhj)ghhubj4)}(hhh]jM)}(hConvert jiffies to nanosecondsh]hConvert jiffies to nanoseconds}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hj)ghhhjXghMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjSHhNhNubj)}(hX**Parameters** ``const unsigned long j`` jiffies value **Return** nanoseconds valueh](jM)}(h**Parameters**h]j)}(hj$hh]h Parameters}(hj&hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"hubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjChh]hconst unsigned long j}(hjEhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj=hubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hj\hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhhMhjYhubah}(h]h ]h"]h$]h&]uh1jhj=hubeh}(h]h ]h"]h$]h&]uh1jhjXhhMhj:hubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h **Return**h]j)}(hj~hh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|hubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhubjM)}(hnanoseconds valueh]hnanoseconds value}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmsecs_to_jiffies (C function)c.msecs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjhhM ubj)}(hlongh]hlong}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjhhM ubh)}(hmsecs_to_jiffiesh]j)}(hmsecs_to_jiffiesh]hmsecs_to_jiffies}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjhhM ubj4)}(h(const unsigned int m)h]j:)}(hconst unsigned int mh](j?)}(hj h]hconst}(hjihhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjiubjQ)}(h h]h }(hj)ihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hunsignedh]hunsigned}(hj7ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hjEihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hinth]hint}(hjSihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hjaihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hmh]hm}(hjoihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjhhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjhhM ubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhM hjhhhubj4)}(hhh]j C)}(hhh]j)}(hconvert milliseconds to jiffiesh]jM)}(hjih]hconvert milliseconds to jiffies}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjiubah}(h]h ]h"]h$]h&]uh1jhjihhhjihNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j ChjihM hjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjiubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]jS)}(hjih]hconst unsigned int m}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjiubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhM hjiubah}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hj'jh]h Description}(hj)jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%jubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjiubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hj=jhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjiubj C)}(hhh](j)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]jM)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hjSjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjOjubah}(h]h ]h"]h$]h&]uh1jhjLjubj)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]jM)}(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.}(hjljhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhjubah}(h]h ]h"]h$]h&]uh1jhjLjubj)}(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]jM)}(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()}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjjubah}(h]h ]h"]h$]h&]uh1jhjLjubeh}(h]h ]h"]h$]h&]j-Cj.Cuh1j ChjajhMhjiubjM)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjiubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hjiubjM)}(h jiffies valueh]h jiffies value}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM$hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsecs_to_jiffies (C macro)c.secs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]j)}(hjjh]hsecs_to_jiffies}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhj khM2ubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj khM2hjjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjjhhhj khM2ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj&kjHj&kjIjJjKuh1hhhhjSHhNhNubjM)}(h``secs_to_jiffies (_secs)``h]jS)}(hj,kh]hsecs_to_jiffies (_secs)}(hj.khhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*kubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjSHhhubji)}(h- convert seconds to jiffies h]j C)}(hhh]j)}(hconvert seconds to jiffies h]jM)}(hconvert seconds to jiffiesh]hconvert seconds to jiffies}(hjMkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hjIkubah}(h]h ]h"]h$]h&]uh1jhjFkubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj[khM2hjBkubah}(h]h ]h"]h$]h&]uh1jhhj[khM2hjSHhhubj)}(hX**Parameters** ``_secs`` time in seconds **Description** Conversion is done by simple multiplication with HZ secs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers. **Return** jiffies valueh](jM)}(h**Parameters**h]j)}(hjtkh]h Parameters}(hjvkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrkubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6hjnkubj)}(hhh]j)}(h``_secs`` time in seconds h](j)}(h ``_secs``h]jS)}(hjkh]h_secs}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM3hjkubj)}(hhh]jM)}(htime in secondsh]htime in seconds}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhM3hjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhM3hjkubah}(h]h ]h"]h$]h&]uh1jhjnkubjM)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjnkubjM)}(h3Conversion is done by simple multiplication with HZh]h3Conversion is done by simple multiplication with HZ}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjnkubjM)}(hvsecs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers.h]hvsecs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6hjnkubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM9hjnkubjM)}(h jiffies valueh]h jiffies value}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM:hjnkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](husecs_to_jiffies (C function)c.usecs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hjIlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjElhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMMubjQ)}(h h]h }(hjXlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjElhhhjWlhMMubj)}(hlongh]hlong}(hjflhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjElhhhjWlhMMubjQ)}(h h]h }(hjtlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjElhhhjWlhMMubh)}(husecs_to_jiffiesh]j)}(husecs_to_jiffiesh]husecs_to_jiffies}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjElhhhjWlhMMubj4)}(h(const unsigned int u)h]j:)}(hconst unsigned int uh](j?)}(hj h]hconst}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(huh]hu}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubah}(h]h ]h"]h$]h&]jjuh1j3hjElhhhjWlhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAlhhhjWlhMMubah}(h]jlhhubj4)}(hhh]j C)}(hhh]j)}(hconvert microseconds to jiffiesh]jM)}(hj$mh]hconvert microseconds to jiffies}(hj&mhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMMhj"mubah}(h]h ]h"]h$]h&]uh1jhjmhhhj3mhNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj3mhMMhjmhhubah}(h]h ]h"]h$]h&]uh1j3hj>lhhhjWlhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjImjHjImjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjSmh]h Parameters}(hjUmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQmubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMQhjMmubj)}(hhh]j)}(h.``const unsigned int u`` time in microseconds h](j)}(h``const unsigned int u``h]jS)}(hjrmh]hconst unsigned int u}(hjtmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMNhjlmubj)}(hhh]jM)}(htime in microsecondsh]htime in microseconds}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhMNhjmubah}(h]h ]h"]h$]h&]uh1jhjlmubeh}(h]h ]h"]h$]h&]uh1jhjmhMNhjimubah}(h]h ]h"]h$]h&]uh1jhjMmubjM)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMPhjMmubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMOhjMmubj C)}(hhh](j)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]jM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMQhjmubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(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]jM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMThjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]j-Cj.Cuh1j ChjmhMQhjMmubjM)}(hXusecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __usecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _usecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.h]hXusecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __usecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _usecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMXhjMmubjM)}(h **Return**h]j)}(hjnh]hReturn}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMahjMmubjM)}(h jiffies valueh]h jiffies value}(hj4nhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMbhjMmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjSHhhhNhNubh)}(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}(hjcnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_nhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrubjQ)}(h h]h }(hjrnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_nhhhjqnhMrubj)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_nhhhjqnhMrubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_nhhhjqnhMrubh)}(hjiffies_to_msecsh]j)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_nhhhjqnhMrubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hj h]hconst}(hjnhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hunsignedh]hunsigned}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjdh]hj}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubah}(h]h ]h"]h$]h&]jjuh1j3hj_nhhhjqnhMrubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[nhhhjqnhMrubah}(h]h ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqnhMrhjXnhhubj4)}(hhh]jM)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hj8ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrhj5ohhubah}(h]h ]h"]h$]h&]uh1j3hjXnhhhjqnhMrubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPojHjPojIjJjKuh1hhhhjSHhNhNubj)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** milliseconds valueh](jM)}(h**Parameters**h]j)}(hjZoh]h Parameters}(hj\ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXoubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMvhjToubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjyoh]hconst unsigned long j}(hj{ohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwoubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMshjsoubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMshjoubah}(h]h ]h"]h$]h&]uh1jhjsoubeh}(h]h ]h"]h$]h&]uh1jhjohMshjpoubah}(h]h ]h"]h$]h&]uh1jhjToubjM)}(h **Return**h]j)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjToubjM)}(hmilliseconds valueh]hmilliseconds value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjToubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjSHhhhNhNubh)}(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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjphMubj)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjphMubjQ)}(h h]h }(hj$phhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjphMubh)}(hjiffies_to_usecsh]j)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hj6phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2pubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjphMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hj h]hconst}(hjRphhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjNpubjQ)}(h h]h }(hj_phhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNpubj)}(hunsignedh]hunsigned}(hjmphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNpubjQ)}(h h]h }(hj{phhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNpubj)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNpubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNpubj)}(hjdh]hj}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJpubah}(h]h ]h"]h$]h&]jjuh1j3hjohhhjphMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjphMubah}(h]h ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphMhjohhubj4)}(hhh]jM)}(hConvert jiffies to microsecondsh]hConvert jiffies to microseconds}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjphhubah}(h]h ]h"]h$]h&]uh1j3hjohhhjphMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjSHhNhNubj)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](jM)}(h**Parameters**h]j)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjpubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjqh]hconst unsigned long j}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj qubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj qubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hj(qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$qhMhj%qubah}(h]h ]h"]h$]h&]uh1jhj qubeh}(h]h ]h"]h$]h&]uh1jhj$qhMhjqubah}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h **Return**h]j)}(hjJqh]hReturn}(hjLqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHqubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjpubjM)}(hmicroseconds valueh]hmicroseconds value}(hj`qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmktime64 (C function) c.mktime64hNtauh1hhjSHhhhNhNubh)}(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]j)}(htime64_th]htime64_t}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqmodnameN classnameNjwjz)}j}]j)}jsmktime64sb c.mktime64asbuh1hhjqhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqhhhjqhMubh)}(hmktime64h]j)}(hjqh]hmktime64}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhhjqhMubj4)}(h(const unsigned int year0, const unsigned int mon0, const unsigned int day, const unsigned int hour, const unsigned int min, const unsigned int sec)h](j:)}(hconst unsigned int year0h](j?)}(hj h]hconst}(hjqhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjqubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hunsignedh]hunsigned}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hj rhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hj&rhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hyear0h]hyear0}(hj4rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst unsigned int mon0h](j?)}(hj h]hconst}(hjMrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjIrubjQ)}(h h]h }(hjZrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIrubj)}(hunsignedh]hunsigned}(hjhrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIrubjQ)}(h h]h }(hjvrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIrubj)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIrubj)}(hmon0h]hmon0}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst unsigned int dayh](j?)}(hj h]hconst}(hjrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hdayh]hday}(hj shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst unsigned int hourh](j?)}(hj h]hconst}(hj%shhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!subjQ)}(h h]h }(hj2shhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!subj)}(hunsignedh]hunsigned}(hj@shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!subjQ)}(h h]h }(hjNshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!subj)}(hinth]hint}(hj\shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!subjQ)}(h h]h }(hjjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!subj)}(hhourh]hhour}(hjxshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst unsigned int minh](j?)}(hj h]hconst}(hjshhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjsubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hminh]hmin}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst unsigned int sech](j?)}(hj h]hconst}(hjshhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjsubjQ)}(h h]h }(hj thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hunsignedh]hunsigned}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjQ)}(h h]h }(hj&thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hinth]hint}(hj4thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjQ)}(h h]h }(hjBthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hsech]hsec}(hjPthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubeh}(h]h ]h"]h$]h&]jjuh1j3hjqhhhjqhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjqhMubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhMhjqhhubj4)}(hhh]jM)}(hConverts date to seconds.h]hConverts date to seconds.}(hjzthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjwthhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjqhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjtjHjtjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubj)}(hhh](j)}(h-``const unsigned int year0`` year to convert h](j)}(h``const unsigned int year0``h]jS)}(hjth]hconst unsigned int year0}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubj)}(hhh]jM)}(hyear to converth]hyear to convert}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMhjtubj)}(h-``const unsigned int mon0`` month to convert h](j)}(h``const unsigned int mon0``h]jS)}(hjth]hconst unsigned int mon0}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubj)}(hhh]jM)}(hmonth to converth]hmonth to convert}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj uhMhj uubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj uhMhjtubj)}(h*``const unsigned int day`` day to convert h](j)}(h``const unsigned int day``h]jS)}(hj-uh]hconst unsigned int day}(hj/uhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+uubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'uubj)}(hhh]jM)}(hday to converth]hday to convert}(hjFuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBuhMhjCuubah}(h]h ]h"]h$]h&]uh1jhj'uubeh}(h]h ]h"]h$]h&]uh1jhjBuhMhjtubj)}(h,``const unsigned int hour`` hour to convert h](j)}(h``const unsigned int hour``h]jS)}(hjfuh]hconst unsigned int hour}(hjhuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjduubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj`uubj)}(hhh]jM)}(hhour to converth]hhour to convert}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{uhMhj|uubah}(h]h ]h"]h$]h&]uh1jhj`uubeh}(h]h ]h"]h$]h&]uh1jhj{uhMhjtubj)}(h-``const unsigned int min`` minute to convert h](j)}(h``const unsigned int min``h]jS)}(hjuh]hconst unsigned int min}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubj)}(hhh]jM)}(hminute to converth]hminute to convert}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjtubj)}(h-``const unsigned int sec`` second to convert h](j)}(h``const unsigned int sec``h]jS)}(hjuh]hconst unsigned int sec}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubj)}(hhh]jM)}(hsecond to converth]hsecond to convert}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(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.}(hj)vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(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.]}(hj8vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(h6This algorithm was first published by Gauss (I think).h]h6This algorithm was first published by Gauss (I think).}(hjGvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(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.}(hjVvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(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.}(hjevhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(h **Return**h]j)}(hjvvh]hReturn}(hjxvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtvubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubjM)}(h5seconds since the epoch time for the given input dateh]h5seconds since the epoch time for the given input date}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&set_normalized_timespec64 (C function)c.set_normalized_timespec64hNtauh1hhjSHhhhNhNubh)}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjvhMubh)}(hset_normalized_timespec64h]j)}(hset_normalized_timespec64h]hset_normalized_timespec64}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjvhMubj4)}(h/(struct timespec64 *ts, time64_t sec, s64 nsec)h](j:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjvubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubh)}(hhh]j)}(h timespec64h]h timespec64}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjvsbc.set_normalized_timespec64asbuh1hhjvubjQ)}(h h]h }(hj6whhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hjDwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(htsh]hts}(hjQwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h time64_t sech](h)}(hhh]j)}(htime64_th]htime64_t}(hjmwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjowmodnameN classnameNjwjz)}j}]j2wc.set_normalized_timespec64asbuh1hhjfwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfwubj)}(hsech]hsec}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(hs64 nsech](h)}(hhh]j)}(hs64h]hs64}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j2wc.set_normalized_timespec64asbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hnsech]hnsec}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjvhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhjvhMubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhMhjvhhubj4)}(hhh]jM)}(h-set timespec sec and nsec parts and normalizeh]h-set timespec sec and nsec parts and normalize}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjxhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#xjHj#xjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj-xh]h Parameters}(hj/xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+xubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'xubj)}(hhh](j)}(hA``struct timespec64 *ts`` pointer to timespec variable to be set h](j)}(h``struct timespec64 *ts``h]jS)}(hjLxh]hstruct timespec64 *ts}(hjNxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjFxubj)}(hhh]jM)}(h&pointer to timespec variable to be seth]h&pointer to timespec variable to be set}(hjexhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjaxhMhjbxubah}(h]h ]h"]h$]h&]uh1jhjFxubeh}(h]h ]h"]h$]h&]uh1jhjaxhMhjCxubj)}(h ``time64_t sec`` seconds to set h](j)}(h``time64_t sec``h]jS)}(hjxh]h time64_t sec}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjxubj)}(hhh]jM)}(hseconds to seth]hseconds to set}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjCxubj)}(h ``s64 nsec`` nanoseconds to set h](j)}(h ``s64 nsec``h]jS)}(hjxh]hs64 nsec}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjxubj)}(hhh]jM)}(hnanoseconds to seth]hnanoseconds to set}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjCxubeh}(h]h ]h"]h$]h&]uh1jhj'xubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'xubjM)}(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}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'xubjM)}(h**Note**h]j)}(hj yh]hNote}(hj"yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'xubjM)}(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 !}(hj6yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj'xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hns_to_timespec64 (C function)c.ns_to_timespec64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h-struct timespec64 ns_to_timespec64 (s64 nsec)h]h)}(h,struct timespec64 ns_to_timespec64(s64 nsec)h](j?)}(hjBh]hstruct}(hjeyhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjayhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjsyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjayhhhjryhMubh)}(hhh]j)}(h timespec64h]h timespec64}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsns_to_timespec64sbc.ns_to_timespec64asbuh1hhjayhhhjryhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjayhhhjryhMubh)}(hns_to_timespec64h]j)}(hjyh]hns_to_timespec64}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjayhhhjryhMubj4)}(h (s64 nsec)h]j:)}(hs64 nsech](h)}(hhh]j)}(hs64h]hs64}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]jyc.ns_to_timespec64asbuh1hhjyubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hnsech]hnsec}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(h]h ]h"]h$]h&]jjuh1j3hjayhhhjryhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]yhhhjryhMubah}(h]jXyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjryhMhjZyhhubj4)}(hhh]jM)}(h!Convert nanoseconds to timespec64h]h!Convert nanoseconds to timespec64}(hj+zhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj(zhhubah}(h]h ]h"]h$]h&]uh1j3hjZyhhhjryhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCzjHjCzjIjJjKuh1hhhhjSHhNhNubj)}(h**Parameters** ``s64 nsec`` the nanoseconds value to be converted **Return** the timespec64 representation of the nsec parameter.h](jM)}(h**Parameters**h]j)}(hjMzh]h Parameters}(hjOzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKzubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjGzubj)}(hhh]j)}(h3``s64 nsec`` the nanoseconds value to be converted h](j)}(h ``s64 nsec``h]jS)}(hjlzh]hs64 nsec}(hjnzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfzubj)}(hhh]jM)}(h%the nanoseconds value to be convertedh]h%the nanoseconds value to be converted}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjfzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjczubah}(h]h ]h"]h$]h&]uh1jhjGzubjM)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjGzubjM)}(h4the timespec64 representation of the nsec parameter.h]h4the timespec64 representation of the nsec parameter.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjGzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__msecs_to_jiffies (C function)c.__msecs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhMubj)}(hlongh]hlong}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhMubh)}(h__msecs_to_jiffiesh]j)}(h__msecs_to_jiffiesh]h__msecs_to_jiffies}(hj){hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzhhhjzhMubj4)}(h(const unsigned int m)h]j:)}(hconst unsigned int mh](j?)}(hj h]hconst}(hjE{hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjA{ubjQ)}(h h]h }(hjR{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjA{ubj)}(hunsignedh]hunsigned}(hj`{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA{ubjQ)}(h h]h }(hjn{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjA{ubj)}(hinth]hint}(hj|{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA{ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjA{ubj)}(hjqih]hm}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj={ubah}(h]h ]h"]h$]h&]jjuh1j3hjzhhhjzhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjzhMubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjzhhubj4)}(hhh]j C)}(hhh]j)}(hconvert milliseconds to jiffiesh]jM)}(hj{h]hconvert milliseconds to jiffies}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj{hMhj{hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM!hj{ubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]jS)}(hj|h]hconst unsigned int m}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj|ubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hj-|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)|hMhj*|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj)|hMhj |ubah}(h]h ]h"]h$]h&]uh1jhj{ubjM)}(h**Description**h]j)}(hjO|h]h Description}(hjQ|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM|ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hj{ubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hje|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj{ubj C)}(hhh](j)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]jM)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hj{|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM!hjw|ubah}(h]h ]h"]h$]h&]uh1jhjt|ubj)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]jM)}(hj'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.h]hr‘too large’ values [that would result in larger than MAX_JIFFY_OFFSET values] mean ‘infinite timeout’ too.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM#hj|ubah}(h]h ]h"]h$]h&]uh1jhjt|ubj)}(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]jM)}(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()}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM&hj|ubah}(h]h ]h"]h$]h&]uh1jhjt|ubeh}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj|hM!hj{ubjM)}(hXwmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code, __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The _msecs_to_jiffies helpers are the HZ dependent conversion routines found in include/linux/jiffies.hh]hXwmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code, __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The _msecs_to_jiffies helpers are the HZ dependent conversion routines found in include/linux/jiffies.h}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM+hj{ubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM3hj{ubjM)}(h jiffies valueh]h jiffies value}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM4hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__usecs_to_jiffies (C function)c.__usecs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBubjQ)}(h h]h }(hj-}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj,}hMBubj)}(hlongh]hlong}(hj;}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj,}hMBubjQ)}(h h]h }(hjI}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj,}hMBubh)}(h__usecs_to_jiffiesh]j)}(h__usecs_to_jiffiesh]h__usecs_to_jiffies}(hj[}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhj,}hMBubj4)}(h(const unsigned int u)h]j:)}(hconst unsigned int uh](j?)}(hj h]hconst}(hjw}hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjs}ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs}ubj)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs}ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs}ubj)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs}ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs}ubj)}(hjlh]hu}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjo}ubah}(h]h ]h"]h$]h&]jjuh1j3hj}hhhj,}hMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhj,}hMBubah}(h]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,}hMBhj}hhubj4)}(hhh]j C)}(hhh]j)}(hconvert microseconds to jiffiesh]jM)}(hj}h]hconvert microseconds to jiffies}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhj}ubah}(h]h ]h"]h$]h&]uh1jhj}hhhj~hNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj~hMBhj}hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhj,}hMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~jHj~jIjJjKuh1hhhhjSHhNhNubj)}(hZ**Parameters** ``const unsigned int u`` time in milliseconds **Return** jiffies valueh](jM)}(h**Parameters**h]j)}(hj'~h]h Parameters}(hj)~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%~ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMFhj!~ubj)}(hhh]j)}(h.``const unsigned int u`` time in milliseconds h](j)}(h``const unsigned int u``h]jS)}(hjF~h]hconst unsigned int u}(hjH~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjD~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChj@~ubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hj_~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[~hMChj\~ubah}(h]h ]h"]h$]h&]uh1jhj@~ubeh}(h]h ]h"]h$]h&]uh1jhj[~hMChj=~ubah}(h]h ]h"]h$]h&]uh1jhj!~ubjM)}(h **Return**h]j)}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMEhj!~ubjM)}(h jiffies valueh]h jiffies value}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMEhj!~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"timespec64_to_jiffies (C function)c.timespec64_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMPubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hMPubj)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhj~hMPubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hMPubh)}(htimespec64_to_jiffiesh]j)}(htimespec64_to_jiffiesh]htimespec64_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hMPubj4)}(h (const struct timespec64 *value)h]j:)}(hconst struct timespec64 *valueh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hj:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjsbc.timespec64_to_jiffiesasbuh1hhjubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj~hhhj~hMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hMPubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMPhj~hhubj4)}(hhh]jM)}(h%convert a timespec64 value to jiffiesh]h%convert a timespec64 value to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMPhjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hMPubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMThjubj)}(hhh]j)}(hW``const struct timespec64 *value`` pointer to :c:type:`struct timespec64 ` h](j)}(h"``const struct timespec64 *value``h]jS)}(hjh]hconst struct timespec64 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMQhjubj)}(hhh]jM)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hj!h]hstruct timespec64}(hj#hhhNhNubah}(h]h ](xrefjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocdriver-api/basics refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]sb reftarget timespec64uh1hhjhMQhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMShjubjM)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMRhjubjM)}(h-Rather, we just shift the bits off the right.h]h-Rather, we just shift the bits off the right.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`hjubjM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"jiffies_to_timespec64 (C function)c.jiffies_to_timespec64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hRvoid jiffies_to_timespec64 (const unsigned long jiffies, struct timespec64 *value)h]h)}(hQvoid jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMuubh)}(hjiffies_to_timespec64h]j)}(hjiffies_to_timespec64h]hjiffies_to_timespec64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMuubj4)}(h7(const unsigned long jiffies, struct timespec64 *value)h](j:)}(hconst unsigned long jiffiesh](j?)}(hj h]hconst}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hlongh]hlong}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjiffiesh]hjiffies}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct timespec64 *valueh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj sbc.jiffies_to_timespec64asbuh1hhjubjQ)}(h h]h }(hjρhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj݁hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMuubah}(h]jۀah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhj݀hhubj4)}(hhh]jM)}(hAconvert jiffies value to :c:type:`struct timespec64 `h](hconvert jiffies value to }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hj hhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jˁc.jiffies_to_timespec64asbjB timespec64uh1hhjqnhMrhjubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjhhubah}(h]h ]h"]h$]h&]uh1j3hj݀hhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjSHhNhNubj)}(h**Parameters** ``const unsigned long jiffies`` jiffies value ``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](jM)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMyhjTubj)}(hhh](j)}(h.``const unsigned long jiffies`` jiffies value h](j)}(h``const unsigned long jiffies``h]jS)}(hjyh]hconst unsigned long jiffies}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMvhjsubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjpubj)}(hP``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](j)}(h``struct timespec64 *value``h]jS)}(hjh]hstruct timespec64 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMxhjubj)}(hhh]jM)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hj˂hhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjՂh]hstruct timespec64}(hjׂhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjӂubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB timespec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMwhj˂ubeh}(h]h ]h"]h$]h&]uh1jLhjhMwhjȂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǂhMxhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_clock_t (C function)c.jiffies_to_clock_thNtauh1hhjSHhhhNhNubh)}(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]j)}(hclock_th]hclock_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsjiffies_to_clock_tsbc.jiffies_to_clock_tasbuh1hhj'hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhjOhMubh)}(hjiffies_to_clock_th]j)}(hjLh]hjiffies_to_clock_t}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhjOhMubj4)}(h(unsigned long x)h]j:)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjEh]hx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjuubah}(h]h ]h"]h$]h&]jjuh1j3hj'hhhjOhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhjOhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMhj hhubj4)}(hhh]jM)}(hConvert jiffies to clock_th]hConvert jiffies to clock_t}(hjރhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjۃhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhjOhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(hn**Parameters** ``unsigned long x`` jiffies value **Return** jiffies converted to clock_t (CLOCKS_PER_SEC)h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/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]jS)}(hjh]hunsigned long x}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h-jiffies converted to clock_t (CLOCKS_PER_SEC)h]h-jiffies converted to clock_t (CLOCKS_PER_SEC)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hclock_t_to_jiffies (C function)c.clock_t_to_jiffieshNtauh1hhjSHhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjQ)}(h h]h }(hjʄhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hclock_t_to_jiffiesh]j)}(hclock_t_to_jiffiesh]hclock_t_to_jiffies}(hj܄hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؄ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long x)h]j:)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjEh]hx}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hConvert clock_t to jiffiesh]hConvert clock_t to jiffies}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjSHhNhNubj)}(hc**Parameters** ``unsigned long x`` clock_t value **Return** clock_t value converted to jiffiesh](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubj)}(hhh]j)}(h"``unsigned long x`` clock_t value h](j)}(h``unsigned long x``h]jS)}(hjh]hunsigned long x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h clock_t valueh]h clock_t value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubjM)}(h **Return**h]j)}(hjՅh]hReturn}(hjׅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӅubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubjM)}(h"clock_t value converted to jiffiesh]h"clock_t value converted to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"jiffies_64_to_clock_t (C function)c.jiffies_64_to_clock_thNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h)notrace u64 jiffies_64_to_clock_t (u64 x)h]h)}(h(notrace u64 jiffies_64_to_clock_t(u64 x)h](hnotrace}(hjhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubh)}(hhh]j)}(hu64h]hu64}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsjiffies_64_to_clock_tsbc.jiffies_64_to_clock_tasbuh1hhjhhhj,hMubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj,hMubh)}(hjiffies_64_to_clock_th]j)}(hjNh]hjiffies_64_to_clock_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj,hMubj4)}(h(u64 x)h]j:)}(hu64 xh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jLc.jiffies_64_to_clock_tasbuh1hhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjEh]hx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj,hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj,hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hMhjhhubj4)}(hhh]jM)}(hConvert jiffies_64 to clock_th]hConvert jiffies_64 to clock_t}(hjֆhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjӆhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj,hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(hy**Parameters** ``u64 x`` jiffies_64 value **Return** jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h``u64 x`` jiffies_64 value h](j)}(h ``u64 x``h]jS)}(hjh]hu64 x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(hjiffies_64 valueh]hjiffies_64 value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies64_to_nsecs (C function)c.jiffies64_to_nsecshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hu64 jiffies64_to_nsecs (u64 j)h]h)}(hu64 jiffies64_to_nsecs(u64 j)h](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjiffies64_to_nsecssbc.jiffies64_to_nsecsasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hjiffies64_to_nsecsh]j)}(hjh]hjiffies64_to_nsecs}(hj·hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʇubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(u64 j)h]j:)}(hu64 jh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.jiffies64_to_nsecsasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h Convert jiffies64 to nanosecondsh]h Convert jiffies64 to nanoseconds}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj>hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjSHhNhNubj)}(hJ**Parameters** ``u64 j`` jiffies64 value **Return** nanoseconds valueh](jM)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhT/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]jS)}(hjh]hu64 j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj|ubj)}(hhh]jM)}(hjiffies64 valueh]hjiffies64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj]ubjM)}(hnanoseconds valueh]hnanoseconds value}(hjӈhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies64_to_msecs (C function)c.jiffies64_to_msecshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h$u64 jiffies64_to_msecs (const u64 j)h]h)}(h#u64 jiffies64_to_msecs(const u64 j)h](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjiffies64_to_msecssbc.jiffies64_to_msecsasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj&hMubh)}(hjiffies64_to_msecsh]j)}(hj#h]hjiffies64_to_msecs}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj&hMubj4)}(h (const u64 j)h]j:)}(h const u64 jh](j?)}(hj h]hconst}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjPubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubh)}(hhh]j)}(hu64h]hu64}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j!c.jiffies64_to_msecsasbuh1hhjPubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj&hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj&hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hMhjhhubj4)}(hhh]jM)}(h!Convert jiffies64 to millisecondsh]h!Convert jiffies64 to milliseconds}(hjljhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjĉhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj߉jHj߉jIjJjKuh1hhhhjSHhNhNubj)}(hQ**Parameters** ``const u64 j`` jiffies64 value **Return** milliseconds valueh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h ``const u64 j`` jiffies64 value h](j)}(h``const u64 j``h]jS)}(hjh]h const u64 j}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(hjiffies64 valueh]hjiffies64 value}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(hmilliseconds valueh]hmilliseconds value}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnsecs_to_jiffies64 (C function)c.nsecs_to_jiffies64hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hu64 nsecs_to_jiffies64 (u64 n)h]h)}(hu64 nsecs_to_jiffies64(u64 n)h](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsnsecs_to_jiffies64sbc.nsecs_to_jiffies64asbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hnsecs_to_jiffies64h]j)}(hjh]hnsecs_to_jiffies64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(u64 n)h]j:)}(hu64 nh](h)}(hhh]j)}(hu64h]hu64}(hj݊hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڊubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjߊmodnameN classnameNjwjz)}j}]jc.nsecs_to_jiffies64asbuh1hhj֊ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj֊ubj)}(hjh]hn}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֊ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjҊubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hj}hhubj4)}(hhh]jM)}(h!Convert nsecs in u64 to jiffies64h]h!Convert nsecs in u64 to jiffies64}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hj/hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjNubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]jS)}(hjsh]hu64 n}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjmubj)}(hhh]jM)}(h nsecs in u64h]h nsecs in u64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjNubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjNubjM)}(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.}(hjċhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjNubjM)}(h**note**h]j)}(hjՋh]hnote}(hj׋hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӋubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjNubji)}(hqNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years h]jM)}(hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 yearsh]hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhjNubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjNubjM)}(h"nsecs converted to jiffies64 valueh]h"nsecs converted to jiffies64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnsecs_to_jiffies (C function)c.nsecs_to_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h&unsigned long nsecs_to_jiffies (u64 n)h]h)}(h%unsigned long nsecs_to_jiffies(u64 n)h](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM*ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhM*ubj)}(hlongh]hlong}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhM*ubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhM*ubh)}(hnsecs_to_jiffiesh]j)}(hnsecs_to_jiffiesh]hnsecs_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjYhM*ubj4)}(h(u64 n)h]j:)}(hu64 nh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.nsecs_to_jiffiesasbuh1hhjubjQ)}(h h]h }(hjnjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hn}(hjՌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjYhM*ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjYhM*ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhM*hj@hhubj4)}(hhh]jM)}(hConvert nsecs in u64 to jiffiesh]hConvert nsecs in u64 to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM*hjhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjYhM*ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM.hjubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]jS)}(hj?h]hu64 n}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM,hj9ubj)}(hhh]jM)}(h nsecs in u64h]h nsecs in u64}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThM,hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThM,hj6ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM.hjubjM)}(hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn't return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.h]hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn’t return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM-hjubjM)}(h**note**h]j)}(hjh]hnote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM1hjubji)}(hqNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years h]jM)}(hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 yearsh]hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM2hjubah}(h]h ]h"]h$]h&]uh1jhhjɍhM2hjubjM)}(h **Return**h]j)}(hjҍh]hReturn}(hjԍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЍubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM5hjubjM)}(h nsecs converted to jiffies valueh]h nsecs converted to jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h timespec64_add_safe (C function)c.timespec64_add_safehNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h`struct timespec64 timespec64_add_safe (const struct timespec64 lhs, const struct timespec64 rhs)h]h)}(h_struct timespec64 timespec64_add_safe(const struct timespec64 lhs, const struct timespec64 rhs)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM?ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hM?ubh)}(hhh]j)}(h timespec64h]h timespec64}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jstimespec64_add_safesbc.timespec64_add_safeasbuh1hhjhhhj$hM?ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hM?ubh)}(htimespec64_add_safeh]j)}(hjTh]htimespec64_add_safe}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj$hM?ubj4)}(h:(const struct timespec64 lhs, const struct timespec64 rhs)h](j:)}(hconst struct timespec64 lhsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jRc.timespec64_add_safeasbuh1hhjubjQ)}(h h]h }(hjێhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlhsh]hlhs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hconst struct timespec64 rhsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]jRc.timespec64_add_safeasbuh1hhjubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hrhsh]hrhs}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj$hM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj$hM?ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$hM?hj hhubj4)}(hhh]jM)}(h=Add two timespec64 values and do a safety check for overflow.h]h=Add two timespec64 values and do a safety check for overflow.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM?hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj$hM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(hX(**Parameters** ``const struct timespec64 lhs`` first (left) timespec64 to add ``const struct timespec64 rhs`` second (right) timespec64 to add **Description** It's assumed that both values are valid (>= 0). And, each timespec64 is in normalized form. **Return** sum of **lhs** + **rhs**h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChjubj)}(hhh](j)}(h?``const struct timespec64 lhs`` first (left) timespec64 to add h](j)}(h``const struct timespec64 lhs``h]jS)}(hjҏh]hconst struct timespec64 lhs}(hjԏhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjЏubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMAhj̏ubj)}(hhh]jM)}(hfirst (left) timespec64 to addh]hfirst (left) timespec64 to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhj̏ubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjɏubj)}(hA``const struct timespec64 rhs`` second (right) timespec64 to add h](j)}(h``const struct timespec64 rhs``h]jS)}(hj h]hconst struct timespec64 rhs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhjubj)}(hhh]jM)}(h second (right) timespec64 to addh]h second (right) timespec64 to add}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMBhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMBhjɏubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMDhjubjM)}(h[It's assumed that both values are valid (>= 0). And, each timespec64 is in normalized form.h]h]It’s assumed that both values are valid (>= 0). And, each timespec64 is in normalized form.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChjubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMFhjubjM)}(hsum of **lhs** + **rhs**h](hsum of }(hjhhhNhNubj)}(h**lhs**h]hlhs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**rhs**h]hrhs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_timespec64 (C function)c.get_timespec64hNtauh1hhjSHhhhNhNubh)}(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}(hjҐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΐhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΐhhhjhM[ubh)}(hget_timespec64h]j)}(hget_timespec64h]hget_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjΐhhhjhM[ubj4)}(hC(struct timespec64 *ts, const struct __kernel_timespec __user *uts)h](j:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(h timespec64h]h timespec64}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsjsbc.get_timespec64asbuh1hhj ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(htsh]hts}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h*const struct __kernel_timespec __user *utsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubh)}(hhh]j)}(h__kernel_timespech]h__kernel_timespec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jIc.get_timespec64asbuh1hhj}ubjQ)}(h h]h }(hjؑhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubh__user}(hj}hhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hutsh]huts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjΐhhhjhM[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjʐhhhjhM[ubah}(h]jŐah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM[hjǐhhubj4)}(hhh]jM)}(h'get user's time value into kernel spaceh]h)get user’s time value into kernel space}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hj,hhubah}(h]h ]h"]h$]h&]uh1j3hjǐhhhjhM[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjSHhNhNubj)}(hXE**Parameters** ``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` ``const struct __kernel_timespec __user *uts`` user's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>` **Description** Handles compat or 32-bit modes. **Return** 0 on success or negative errno on errorh](jM)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM_hjKubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]jS)}(hjph]hstruct timespec64 *ts}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM\hjjubj)}(hhh]jM)}(h4destination :c:type:`struct timespec64 `h](h destination }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB timespec64uh1hhjhM\hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjgubj)}(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]jS)}(hjȒh]h*const struct __kernel_timespec __user *uts}(hjʒhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjƒubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hj’ubj)}(hhh]jM)}(hKuser's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>`h](huser’s time value as }(hjhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]jS)}(hjh]hstruct __kernel_timespec}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB__kernel_timespecuh1hhjݒhM]hjubeh}(h]h ]h"]h$]h&]uh1jLhjݒhM]hjޒubah}(h]h ]h"]h$]h&]uh1jhj’ubeh}(h]h ]h"]h$]h&]uh1jhjݒhM]hjgubeh}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM_hjKubjM)}(hHandles compat or 32-bit modes.h]hHandles compat or 32-bit modes.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM^hjKubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`hjKubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMahjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_timespec64 (C function)c.put_timespec64hNtauh1hhjSHhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM{ubh)}(hput_timespec64h]j)}(hput_timespec64h]hput_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM{ubj4)}(hC(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j:)}(hconst struct timespec64 *tsh](j?)}(hj h]hconst}(hj˓hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjǓubjQ)}(h h]h }(hjؓhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjǓubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjǓubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjǓubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.put_timespec64asbuh1hhjǓubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjǓubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǓubj)}(htsh]hts}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǓubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjÓubj:)}(h$struct __kernel_timespec __user *utsh](j?)}(hjBh]hstruct}(hjXhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]j)}(h__kernel_timespech]h__kernel_timespec}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]j c.put_timespec64asbuh1hhjTubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh__user}(hjThhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hutsh]huts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjÓubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM{ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM{ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM{hjhhubj4)}(hhh]jM)}(hUconvert timespec64 value to __kernel_timespec format and copy the latter to userspaceh]hUconvert timespec64 value to __kernel_timespec format and copy the latter to userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM{ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(h**Parameters** ``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` ``struct __kernel_timespec __user *uts`` user's :c:type:`struct __kernel_timespec <__kernel_timespec>` **Return** 0 on success or negative errno on errorh](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hO``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` h](j)}(h``const struct timespec64 *ts``h]jS)}(hj,h]hconst struct timespec64 *ts}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM}hj&ubj)}(hhh]jM)}(h.input :c:type:`struct timespec64 `h](hinput }(hjEhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjOh]hstruct timespec64}(hjQhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB timespec64uh1hhjAhM}hjEubeh}(h]h ]h"]h$]h&]uh1jLhjAhM}hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM}hj#ubj)}(hg``struct __kernel_timespec __user *uts`` user's :c:type:`struct __kernel_timespec <__kernel_timespec>` h](j)}(h(``struct __kernel_timespec __user *uts``h]jS)}(hjh]h$struct __kernel_timespec __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM~hj~ubj)}(hhh]jM)}(h=user's :c:type:`struct __kernel_timespec <__kernel_timespec>`h](h user’s }(hjhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]jS)}(hjh]hstruct __kernel_timespec}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB__kernel_timespecuh1hhjhM~hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM~hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjޕh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܕubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_old_timespec32 (C function)c.get_old_timespec32hNtauh1hhjSHhhhNhNubh)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj1hMubh)}(hget_old_timespec32h]j)}(hget_old_timespec32h]hget_old_timespec32}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj1hMubj4)}(h/(struct timespec64 *ts, const void __user *uts)h](j:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hj`hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj\ubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubh)}(hhh]j)}(h timespec64h]h timespec64}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjFsbc.get_old_timespec32asbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(htsh]hts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubj:)}(hconst void __user *utsh](j?)}(hj h]hconst}(hjҖhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjΖubjQ)}(h h]h }(hjߖhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΖubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΖubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΖubh__user}(hjΖhhhNhNubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΖubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΖubj)}(hutsh]huts}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΖubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj1hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMhjhhubj4)}(hhh]jM)}(h2get user's old-format time value into kernel spaceh]h4get user’s old-format time value into kernel space}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjOhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjSHhNhNubj)}(hXC**Parameters** ``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` ``const void __user *uts`` user's old-format time value (:c:type:`struct old_timespec32 `) **Description** Handles X86_X32_ABI compatibility conversion. **Return** 0 on success or negative errno on errorh](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]jS)}(hjh]hstruct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h4destination :c:type:`struct timespec64 `h](h destination }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB timespec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hk``const void __user *uts`` user's old-format time value (:c:type:`struct old_timespec32 `) h](j)}(h``const void __user *uts``h]jS)}(hjh]hconst void __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(hOuser's old-format time value (:c:type:`struct old_timespec32 `)h](h user’s old-format time value (}(hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]jS)}(hjh]hstruct old_timespec32}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBold_timespec32uh1hhjhMhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubjM)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubjM)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_old_timespec32 (C function)c.put_old_timespec32hNtauh1hhjSHhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjĘhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjØhMubh)}(hput_old_timespec32h]j)}(hput_old_timespec32h]hput_old_timespec32}(hj֘hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҘubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjØhMubj4)}(h/(const struct timespec64 *ts, void __user *uts)h](j:)}(hconst struct timespec64 *tsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsjؘsbc.put_old_timespec32asbuh1hhjubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htsh]hts}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid __user *utsh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubh__user}(hj{hhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hutsh]huts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjØhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjØhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjØhMhjhhubj4)}(hhh]jM)}(hmconvert timespec64 value to :c:type:`struct old_timespec32 ` and copy the latter to userspaceh](hconvert timespec64 value to }(hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]jS)}(hjh]hstruct old_timespec32}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jGc.put_old_timespec32asbjBold_timespec32uh1hhjqnhMrhjubh! and copy the latter to userspace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjØhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhT/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]jS)}(hjMh]hconst struct timespec64 *ts}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjGubj)}(hhh]jM)}(h.input :c:type:`struct timespec64 `h](hinput }(hjfhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjph]hstruct timespec64}(hjrhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB timespec64uh1hhjbhMhjfubeh}(h]h ]h"]h$]h&]uh1jLhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(hM``void __user *uts`` user's :c:type:`struct old_timespec32 ` h](j)}(h``void __user *uts``h]jS)}(hjh]hvoid __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h7user's :c:type:`struct old_timespec32 `h](h user’s }(hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]jS)}(hjȚh]hstruct old_timespec32}(hjʚhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjƚubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBold_timespec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj(ubjM)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj(ubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj(ubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_itimerspec64 (C function)c.get_itimerspec64hNtauh1hhjSHhhhNhNubh)}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubh)}(hget_itimerspec64h]j)}(hget_itimerspec64h]hget_itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjyhMubj4)}(hG(struct itimerspec64 *it, const struct __kernel_itimerspec __user *uit)h](j:)}(hstruct itimerspec64 *ith](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hjƛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÛubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjțmodnameN classnameNjwjz)}j}]j)}jsjsbc.get_itimerspec64asbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hith]hit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h,const struct __kernel_itimerspec __user *uith](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h__kernel_itimerspech]h__kernel_itimerspec}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]jc.get_itimerspec64asbuh1hhjubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huith]huit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjghhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjyhMubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhj`hhubj4)}(hhh]jM)}(hWget user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` into kernel spaceh](h get user’s }(hjȜhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]jS)}(hjҜh]hstruct __kernel_itimerspec}(hjԜhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjМubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.get_itimerspec64asbjB__kernel_itimerspecuh1hhjqnhMrhjȜubh into kernel space}(hjȜhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjŜhhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj ubj)}(hhh](j)}(hU``struct itimerspec64 *it`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *it``h]jS)}(hj1h]hstruct itimerspec64 *it}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj+ubj)}(hhh]jM)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(hjJhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjTh]hstruct itimerspec64}(hjVhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB itimerspec64uh1hhjFhMhjJubeh}(h]h ]h"]h$]h&]uh1jLhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(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]jS)}(hjh]h,const struct __kernel_itimerspec __user *uit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(hjhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]jS)}(hjh]hstruct __kernel_itimerspec}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB__kernel_itimerspecuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj ubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_itimerspec64 (C function)c.put_itimerspec64hNtauh1hhjSHhhhNhNubh)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj6hMubh)}(hput_itimerspec64h]j)}(hput_itimerspec64h]hput_itimerspec64}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj6hMubj4)}(hG(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j:)}(hconst struct itimerspec64 *ith](j?)}(hj h]hconst}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjaubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjKsbc.put_itimerspec64asbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hj̞hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hith]hit}(hjٞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubj:)}(h&struct __kernel_itimerspec __user *uith](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h__kernel_itimerspech]h__kernel_itimerspec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.put_itimerspec64asbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huith]huit}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubeh}(h]h ]h"]h$]h&]jjuh1j3hj$hhhj6hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj6hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMhjhhubj4)}(hhh]jM)}(hsconvert :c:type:`struct itimerspec64 ` to __kernel_itimerspec format and copy the latter to userspaceh](hconvert }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.put_itimerspec64asbjB itimerspec64uh1hhjqnhMrhjubh? to __kernel_itimerspec format and copy the latter to userspace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj6hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjşjHjşjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjϟh]h Parameters}(hjџhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͟ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjɟubj)}(hhh](j)}(hU``const struct itimerspec64 *it`` input :c:type:`struct itimerspec64 ` h](j)}(h!``const struct itimerspec64 *it``h]jS)}(hjh]hconst struct itimerspec64 *it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hm``struct __kernel_itimerspec __user *uit`` user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` h](j)}(h*``struct __kernel_itimerspec __user *uit``h]jS)}(hjFh]h&struct __kernel_itimerspec __user *uit}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj@ubj)}(hhh]jM)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(hj_hhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]jS)}(hjih]hstruct __kernel_itimerspec}(hjkhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB__kernel_itimerspecuh1hhj[hMhj_ubeh}(h]h ]h"]h$]h&]uh1jLhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubeh}(h]h ]h"]h$]h&]uh1jhjɟubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjɟubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjɟubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!get_old_itimerspec32 (C function)c.get_old_itimerspec32hNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h_int get_old_itimerspec32 (struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h]h)}(h^int get_old_itimerspec32(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hget_old_itimerspec32h]j)}(hget_old_itimerspec32h]hget_old_itimerspec32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hF(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j:)}(hstruct itimerspec64 *itsh](j?)}(hjBh]hstruct}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsjsbc.get_old_itimerspec32asbuh1hhjubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hitsh]hits}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h*const struct old_itimerspec32 __user *uitsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hold_itimerspec32h]hold_itimerspec32}(hj͡hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʡubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjϡmodnameN classnameNjwjz)}j}]j\c.get_old_itimerspec32asbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huitsh]huits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjݠhhhjhMubah}(h]jؠah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjڠhhubj4)}(hhh]jM)}(hQget user's :c:type:`struct old_itimerspec32 ` into kernel spaceh](h get user’s }(hjBhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjLh]hstruct old_itimerspec32}(hjNhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]j\c.get_old_itimerspec32asbjBold_itimerspec32uh1hhjqnhMrhjBubh into kernel space}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj?hhubah}(h]h ]h"]h$]h&]uh1j3hjڠhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/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]jS)}(hjh]hstruct itimerspec64 *its}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(hjĢhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hj΢h]hstruct itimerspec64}(hjТhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhj̢ubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB itimerspec64uh1hhjhMhjĢubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hk``const struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h.``const struct old_itimerspec32 __user *uits``h]jS)}(hjh]h*const struct old_itimerspec32 __user *uits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hj&h]hstruct old_itimerspec32}(hj(hhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBold_itimerspec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!put_old_itimerspec32 (C function)c.put_old_itimerspec32hNtauh1hhjSHhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hput_old_itimerspec32h]j)}(hput_old_itimerspec32h]hput_old_itimerspec32}(hjãhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(hF(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j:)}(hconst struct itimerspec64 *itsh](j?)}(hj h]hconst}(hjߣhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjۣubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjۣubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjۣubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjۣubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjţsbc.put_old_itimerspec32asbuh1hhjۣubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjۣubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۣubj)}(hitsh]hits}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۣubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjףubj:)}(h$struct old_itimerspec32 __user *uitsh](j?)}(hjBh]hstruct}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubh)}(hhh]j)}(hold_itimerspec32h]hold_itimerspec32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j4c.put_old_itimerspec32asbuh1hhjhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubh__user}(hjhhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hjȤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(huitsh]huits}(hjդhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjףubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hconvert :c:type:`struct itimerspec64 ` to :c:type:`struct old_itimerspec32 ` and copy the latter to userspaceh](hconvert }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hj h]hstruct itimerspec64}(hj hhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]j4c.put_old_itimerspec32asbjB itimerspec64uh1hhjqnhMrhjubh to }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hj1h]hstruct old_itimerspec32}(hj3hhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj%jBold_itimerspec32uh1hhjqnhMrhjubh! and copy the latter to userspace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfubj)}(hhh](j)}(hV``const struct itimerspec64 *its`` input :c:type:`struct itimerspec64 ` h](j)}(h"``const struct itimerspec64 *its``h]jS)}(hjh]hconst struct itimerspec64 *its}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(he``struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h(``struct old_itimerspec32 __user *uits``h]jS)}(hjh]h$struct old_itimerspec32 __user *uits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjݥubj)}(hhh]jM)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBold_itimerspec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݥubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjfubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%__round_jiffies_relative (C function)c.__round_jiffies_relativehNtauh1hhjSHhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhMubh)}(h__round_jiffies_relativeh]j)}(h__round_jiffies_relativeh]h__round_jiffies_relative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhjhMubj4)}(h(unsigned long j, int cpu)h](j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjۦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjצubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjצubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjצubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjצubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjצubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjӦubj:)}(hint cpuh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hcpuh]hcpu}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjӦubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjhMubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjwhhubj4)}(hhh]jM)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjnhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hj˧hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjǧ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]jS)}(hjh]hint cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hjihhhNhNubj)}(h**j**h]hj}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh parameter.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hround_jiffies (C function)c.round_jiffieshNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h-unsigned long round_jiffies (unsigned long j)h]h)}(h,unsigned long round_jiffies(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hlongh]hlong}(hjǨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjQ)}(h h]h }(hjըhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h round_jiffiesh]j)}(h round_jiffiesh]h round_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long j)h]j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjdh]hj}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjahhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjީubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(hround_jiffies() rounds an absolute time in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.h]hround_jiffies() rounds an absolute time in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.h]hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hjhhhNhNubj)}(h**j**h]hj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#round_jiffies_relative (C function)c.round_jiffies_relativehNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h6unsigned long round_jiffies_relative (unsigned long j)h]h)}(h5unsigned long round_jiffies_relative(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjchMubj)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjchMubh)}(hround_jiffies_relativeh]j)}(hround_jiffies_relativeh]hround_jiffies_relative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjchMubj4)}(h(unsigned long j)h]j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjʪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjتhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjQhhhjchMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjchMubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchMhjJhhubj4)}(hhh]jM)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjchMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubj)}(hhh]j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]jS)}(hjPh]hunsigned long j}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjJubj)}(hhh]jM)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubjM)}(hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.h]hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubjM)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hjhhhNhNubj)}(h**j**h]hj}(hjǫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(__round_jiffies_up_relative (C function)c.__round_jiffies_up_relativehNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hDunsigned long __round_jiffies_up_relative (unsigned long j, int cpu)h]h)}(hCunsigned long __round_jiffies_up_relative(unsigned long j, int cpu)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h__round_jiffies_up_relativeh]j)}(h__round_jiffies_up_relativeh]h__round_jiffies_up_relative}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long j, int cpu)h](j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hlongh]hlong}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubj:)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjŬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj)}(hhh](j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]jS)}(hj0h]hunsigned long j}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj*ubj)}(hhh]jM)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]jS)}(hjih]hint cpu}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjcubj)}(hhh]jM)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubjM)}(hThis is the same as __round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h]hThis is the same as __round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don’t fire too early.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hround_jiffies_up (C function)c.round_jiffies_uphNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h0unsigned long round_jiffies_up (unsigned long j)h]h)}(h/unsigned long round_jiffies_up(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hround_jiffies_uph]j)}(hround_jiffies_uph]hround_jiffies_up}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long j)h]j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hlongh]hlong}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjdh]hj}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jܭah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjޭhhubj4)}(hhh]jM)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjޭhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjŮh]h Parameters}(hjǮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjîubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjޮubj)}(hhh]jM)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjޮubeh}(h]h ]h"]h$]h&]uh1jhjhMhjۮubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&round_jiffies_up_relative (C function)c.round_jiffies_up_relativehNtauh1hhjSHhhhNhNubh)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhjrhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhjrhMubh)}(hround_jiffies_up_relativeh]j)}(hround_jiffies_up_relativeh]hround_jiffies_up_relative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhjrhMubj4)}(h(unsigned long j)h]j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj˯hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjٯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjdh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhjrhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjYhhubj4)}(hhh]jM)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj:ubj)}(hhh]j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]jS)}(hj_h]hunsigned long j}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjYubj)}(hhh]jM)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj:ubjM)}(hThis is the same as round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h]hThis is the same as round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don’t fire too early.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_init_key (C function)c.timer_init_keyhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(hvoid timer_init_key (struct timer_list *timer, void (*func)(struct timer_list *), unsigned int flags, const char *name, struct lock_class_key *key)h]h)}(hvoid timer_init_key(struct timer_list *timer, void (*func)(struct timer_list*), unsigned int flags, const char *name, struct lock_class_key *key)h](j)}(hvoidh]hvoid}(hj߰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۰hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj۰hhhjhMaubh)}(htimer_init_keyh]j)}(htimer_init_keyh]htimer_init_key}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj۰hhhjhMaubj4)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsjsbc.timer_init_keyasbuh1hhjubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void (*func)(struct timer_list*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfunch]hfunc}(hjıhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjұhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hj߱hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jVc.timer_init_keyasbuh1hhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjDzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjղhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct lock_class_key *keyh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hlock_class_keyh]hlock_class_key}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jVc.timer_init_keyasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkeyh]hkey}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj۰hhhjhMaubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjװhhhjhMaubah}(h]jҰah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMahj԰hhubj4)}(hhh]jM)}(hinitialize a timerh]hinitialize a timer}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMahjyhhubah}(h]h ]h"]h$]h&]uh1j3hj԰hhhjhMaubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(hX**Parameters** ``struct timer_list *timer`` the timer to be initialized ``void (*func)(struct timer_list *)`` timer callback function ``unsigned int flags`` timer flags ``const char *name`` name of the timer ``struct lock_class_key *key`` lockdep class key of the fake lock used for tracking timer sync lock dependencies **Description** timer_init_key() must be done to a timer prior to calling *any* of the other timer functions.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehjubj)}(hhh](j)}(h9``struct timer_list *timer`` the timer to be initialized h](j)}(h``struct timer_list *timer``h]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMbhjubj)}(hhh]jM)}(hthe timer to be initializedh]hthe timer to be initialized}(hjֳhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjҳhMbhjӳubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҳhMbhjubj)}(h>``void (*func)(struct timer_list *)`` timer callback function h](j)}(h%``void (*func)(struct timer_list *)``h]jS)}(hjh]h!void (*func)(struct timer_list *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjubj)}(hhh]jM)}(htimer callback functionh]htimer callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMchj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMchjubj)}(h#``unsigned int flags`` timer flags h](j)}(h``unsigned int flags``h]jS)}(hj/h]hunsigned int flags}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhj)ubj)}(hhh]jM)}(h timer flagsh]h timer flags}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMdhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMdhjubj)}(h'``const char *name`` name of the timer h](j)}(h``const char *name``h]jS)}(hjhh]hconst char *name}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehjbubj)}(hhh]jM)}(hname of the timerh]hname of the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMehj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMehjubj)}(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]jS)}(hjh]hstruct lock_class_key *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMghjubj)}(hhh]jM)}(hQlockdep class key of the fake lock used for tracking timer sync lock dependenciesh]hQlockdep class key of the fake lock used for tracking timer sync lock dependencies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjݴh]h Description}(hjߴhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۴ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMihjubjM)}(h]timer_init_key() must be done to a timer prior to calling *any* of the other timer functions.h](h:timer_init_key() must be done to a timer prior to calling }(hjhhhNhNubj3)}(h*any*h]hany}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubh of the other timer functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmod_timer_pending (C function)c.mod_timer_pendinghNtauh1hhjSHhhhNhNubh)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjBhMyubh)}(hmod_timer_pendingh]j)}(hmod_timer_pendingh]hmod_timer_pending}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjBhMyubj4)}(h1(struct timer_list *timer, unsigned long expires)h](j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjqhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjmubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjWsbc.mod_timer_pendingasbuh1hhjmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(htimerh]htimer}(hjʵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubj:)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߵubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjߵubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߵubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjߵubj)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߵubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjBhMyubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjBhMyubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMyhj)hhubj4)}(hhh]jM)}(h Modify a pending timer's timeouth]h"Modify a pending timer’s timeout}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjBhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjBhMyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hjaubj)}(hhh](j)}(h>``struct timer_list *timer`` The pending timer to be modified h](j)}(h``struct timer_list *timer``h]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMzhjubj)}(hhh]jM)}(h The pending timer to be modifiedh]h The pending timer to be modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhj}ubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]jS)}(hjh]hunsigned long expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM{hjubj)}(hhh]jM)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjضhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjԶhM{hjնubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԶhM{hj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hjaubjM)}(himod_timer_pending() is the same for pending timers as mod_timer(), but will not activate inactive timers.h]himod_timer_pending() is the same for pending timers as mod_timer(), but will not activate inactive timers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM|hjaubjM)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hjhhhNhNubj)}(h**timer->function**h]htimer->function}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 == NULL then the start operation is silently discarded.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjaubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjaubj C)}(hhh](j)}(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](jS)}(h``0``h]h0}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubh4 - The timer was inactive and not modified or was in}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjbubj)}(hhh]jM)}(h.shutdown state and the operation was discardedh]h.shutdown state and the operation was discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhjXubj)}(hB``1`` - The timer was active and requeued to expire at **expires**h]jM)}(hjh](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh2 - The timer was active and requeued to expire at }(hjhhhNhNubj)}(h **expires**h]hexpires}(hjƷhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]j-Cjuh1j ChjhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmod_timer (C function) c.mod_timerhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h?int mod_timer (struct timer_list *timer, unsigned long expires)h]h)}(h>int mod_timer(struct timer_list *timer, unsigned long expires)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h mod_timerh]j)}(h mod_timerh]h mod_timer}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h1(struct timer_list *timer, unsigned long expires)h](j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubh)}(hhh]j)}(h timer_listh]h timer_list}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsj*sb c.mod_timerasbuh1hhj@ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjĸhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjҸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hModify a timer's timeouth]hModify a timer’s timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjSHhNhNubj)}(hXZ**Parameters** ``struct timer_list *timer`` The timer to be modified ``unsigned long expires`` New absolute timeout in jiffies **Description** mod_timer(timer, expires) is equivalent to: timer_delete(timer); timer->expires = expires; add_timer(timer); mod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time **expires**. Note that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer. If **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless. **Return** * ``0`` - The timer was inactive and started or was in shutdown state and the operation was discarded * ``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry timeh](jM)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubj)}(hhh](j)}(h6``struct timer_list *timer`` The timer to be modified h](j)}(h``struct timer_list *timer``h]jS)}(hjYh]hstruct timer_list *timer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjSubj)}(hhh]jM)}(hThe timer to be modifiedh]hThe timer to be modified}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]jS)}(hjh]hunsigned long expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubjM)}(h**Description**h]j)}(hj͹h]h Description}(hjϹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˹ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubjM)}(h+mod_timer(timer, expires) is equivalent to:h]h+mod_timer(timer, expires) is equivalent to:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubji)}(hAtimer_delete(timer); timer->expires = expires; add_timer(timer); h]jM)}(h@timer_delete(timer); timer->expires = expires; add_timer(timer);h]h@timer_delete(timer); timer->expires = expires; add_timer(timer);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhj4ubjM)}(hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time **expires**.h](hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time }(hj hhhNhNubj)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubjM)}(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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubjM)}(hIf **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.h](hIf }(hj;hhhNhNubj)}(h**timer->function**h]htimer->function}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubhl == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj4ubj C)}(hhh](j)}(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](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh8 - The timer was inactive and started or was in shutdown}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubj)}(hhh]jM)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj{ubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhjtubj)}(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](jS)}(h``1``h]h1}(hjغhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjԺubh2 - The timer was active and requeued to expire at }(hjԺhhhNhNubj)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԺubh or}(hjԺhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjкubj)}(hhh]jM)}(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 }(hjhhhNhNubj)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) did not change the effective expiry time}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjкubeh}(h]h ]h"]h$]h&]uh1jhjhMhjͺubah}(h]h ]h"]h$]h&]uh1jhjɺubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]j-Cjuh1j ChjhMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_reduce (C function)c.timer_reducehNtauh1hhjSHhhhNhNubh)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhjrhMubh)}(h timer_reduceh]j)}(h timer_reduceh]h timer_reduce}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhjrhMubj4)}(h1(struct timer_list *timer, unsigned long expires)h](j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.timer_reduceasbuh1hhjubjQ)}(h h]h }(hj߻hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hexpiresh]hexpires}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhjrhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjYhhubj4)}(hhh]jM)}(h7Modify a timer's timeout if it would reduce the timeouth]h9Modify a timer’s timeout if it would reduce the timeout}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hThe timer to be modifiedh]hThe timer to be modified}(hjϼhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj˼hMhj̼ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˼hMhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]jS)}(hjh]hunsigned long expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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 }(hj@hhhNhNubj)}(h **timer**h]htimer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh% is not enqueued it starts the timer.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hjahhhNhNubj)}(h**timer->function**h]htimer->function}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh8 == NULL then the start operation is silently discarded.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj C)}(hhh](j)}(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](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh8 - The timer was inactive and started or was in shutdown}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hjȽhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/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&]uh1jhjubj)}(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](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh2 - The timer was active and requeued to expire at }(hjhhhNhNubj)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh or}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(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 }(hj,hhhNhNubj)}(h **expires**h]hexpires}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubhi did not change the effective expiry time such that the timer would expire earlier than already scheduled}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/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&]uh1jhjubeh}(h]h ]h"]h$]h&]j-Cjuh1j ChjĽhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer (C function) c.add_timerhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h)void add_timer (struct timer_list *timer)h]h)}(h(void add_timer(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h add_timerh]j)}(h add_timerh]h add_timer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjȾhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjľubjQ)}(h h]h }(hjվhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjľubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.add_timerasbuh1hhjľubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjľubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjľubj)}(htimerh]htimer}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjľubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h Start a timerh]h Start a timer}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubj)}(hhh]j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjǿh]h Description}(hjɿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjſubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubjM)}(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 }(hjݿhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݿubh to expire at }(hjݿhhhNhNubj)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݿubh in the future. }(hjݿhhhNhNubj)}(h**timer->expires**h]htimer->expires}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݿubh is the absolute expiry time measured in ‘jiffies’. When the timer expires timer->function(timer) will be invoked from soft interrupt context.}(hjݿhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubjM)}(haThe **timer->expires** and **timer->function** fields must be set prior to calling this function.h](hThe }(hj"hhhNhNubj)}(h**timer->expires**h]htimer->expires}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh and }(hj"hhhNhNubj)}(h**timer->function**h]htimer->function}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh3 fields must be set prior to calling this function.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubjM)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hjUhhhNhNubj)}(h**timer->function**h]htimer->function}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh8 == NULL then the start operation is silently discarded.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubjM)}(hgIf **timer->expires** is already in the past **timer** will be queued to expire at the next timer tick.h](hIf }(hjvhhhNhNubj)}(h**timer->expires**h]htimer->expires}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh is already in the past }(hjvhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh1 will be queued to expire at the next timer tick.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_local (C function)c.add_timer_localhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h/void add_timer_local (struct timer_list *timer)h]h)}(h.void add_timer_local(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hadd_timer_localh]j)}(hadd_timer_localh]hadd_timer_local}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsjsbc.add_timer_localasbuh1hhjubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hStart a timer on the local CPUh]hStart a timer on the local CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_global (C function)c.add_timer_globalhNtauh1hhjSHhhhNhNubh)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjvhMubh)}(hadd_timer_globalh]j)}(hadd_timer_globalh]hadd_timer_global}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjvhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.add_timer_globalasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjvhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhjvhMubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhMhj]hhubj4)}(hhh]jM)}(h+Start a timer without TIMER_PINNED flag seth]h+Start a timer without TIMER_PINNED flag set}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj%hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubj)}(hhh]j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]jS)}(hjih]hstruct timer_list *timer}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjcubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubjM)}(hESame as add_timer() except that the timer flag TIMER_PINNED is unset.h]hESame as add_timer() except that the timer flag TIMER_PINNED is unset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubjM)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_on (C function)c.add_timer_onhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h5void add_timer_on (struct timer_list *timer, int cpu)h]h)}(h4void add_timer_on(struct timer_list *timer, int cpu)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h add_timer_onh]j)}(h add_timer_onh]h add_timer_on}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h#(struct timer_list *timer, int cpu)h](j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(h timer_listh]h timer_list}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjsbc.add_timer_onasbuh1hhj1ubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h!Start a timer on a particular CPUh]h!Start a timer on a particular CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj ubj)}(hhh](j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]jS)}(hj.h]hstruct timer_list *timer}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj(ubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM hj%ubj)}(h#``int cpu`` The CPU to start it on h](j)}(h ``int cpu``h]jS)}(hjgh]hint cpu}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjaubj)}(hhh]jM)}(hThe CPU to start it onh]hThe CPU to start it on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj ubjM)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_delete (C function)c.timer_deletehNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h+int timer_delete (struct timer_list *timer)h]h)}(h*int timer_delete(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMoubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMoubh)}(h timer_deleteh]j)}(h timer_deleteh]h timer_delete}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMoubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hj3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj/ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubh)}(hhh]j)}(h timer_listh]h timer_list}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjsbc.timer_deleteasbuh1hhj/ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMoubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMohjhhubj4)}(hhh]jM)}(hDeactivate a timerh]hDeactivate a timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMohjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMshjubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMphjubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMphj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMphjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMrhjubjM)}(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 }(hjHhhhNhNubj)}(h **timer**h]htimer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhS can be rearmed concurrently then the return value of this function is meaningless.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMqhjubjM)}(h **Return**h]j)}(hjkh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMwhjubj C)}(hhh](j)}(h!``0`` - The timer was not pendingh]jM)}(hjh](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - The timer was not pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMxhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h-``1`` - The timer was pending and deactivatedh]jM)}(hjh](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh( - The timer was pending and deactivated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j-Cjuh1j ChjhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_shutdown (C function)c.timer_shutdownhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h-int timer_shutdown (struct timer_list *timer)h]h)}(h,int timer_shutdown(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(htimer_shutdownh]j)}(htimer_shutdownh]htimer_shutdown}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hj3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj/ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubh)}(hhh]j)}(h timer_listh]h timer_list}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjsbc.timer_shutdownasbuh1hhj/ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h'Deactivate a timer and prevent rearmingh]h'Deactivate a timer and prevent rearming}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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 }(hjHhhhNhNubj)}(h **timer**h]htimer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh6 after this function returns will be silently ignored.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj C)}(hhh](j)}(h!``0`` - The timer was not pendingh]jM)}(hjh](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - The timer was not pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h``1`` - The timer was pendingh]jM)}(hjh](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - The timer was pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/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&]j-Cjuh1j ChjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"timer_delete_sync_try (C function)c.timer_delete_sync_tryhNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h4int timer_delete_sync_try (struct timer_list *timer)h]h)}(h3int timer_delete_sync_try(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(htimer_delete_sync_tryh]j)}(htimer_delete_sync_tryh]htimer_delete_sync_try}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjBhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj>ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubh)}(hhh]j)}(h timer_listh]h timer_list}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]j)}jsj(sbc.timer_delete_sync_tryasbuh1hhj>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hTry to deactivate a timerh]hTry to deactivate a timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/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]jS)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jM)}(hTimer to deactivateh]hTimer to deactivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj C)}(hhh](j)}(h"``0`` - The timer was not pendingh]jM)}(hjh](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - The timer was not pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.``1`` - The timer was pending and deactivatedh]jM)}(hjh](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh) - The timer was pending and deactivated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hB``-1`` - The timer callback function is running on a different CPUh]jM)}(hjh](jS)}(h``-1``h]h-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh< - The timer callback function is running on a different CPU}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/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&]j-Cjuh1j ChjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_delete_sync (C function)c.timer_delete_synchNtauh1hhjSHhhhNhNubh)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMaubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj6hMaubh)}(htimer_delete_synch]j)}(htimer_delete_synch]htimer_delete_sync}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj6hMaubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjaubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjKsbc.timer_delete_syncasbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubah}(h]h ]h"]h$]h&]jjuh1j3hj$hhhj6hMaubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj6hMaubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMahjhhubj4)}(hhh]jM)}(h6Deactivate a timer and wait for the handler to finish.h]h6Deactivate a timer and wait for the handler to finish.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMahjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj6hMaubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehjubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]jS)}(hj)h]hstruct timer_list *timer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMbhj#ubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hMbhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMbhj ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhjubjM)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjubjM)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMjhjubj)}(hXCPU0 CPU1 ---- ---- call_timer_fn(); base->running_timer = mytimer; spin_lock_irq(somelock); spin_lock(somelock); timer_delete_sync(mytimer); while (base->running_timer == mytimer);h]hXCPU0 CPU1 ---- ---- call_timer_fn(); base->running_timer = mytimer; spin_lock_irq(somelock); spin_lock(somelock); timer_delete_sync(mytimer); while (base->running_timer == mytimer);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMnhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hjubjM)}(hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.h]hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj C)}(hhh](j)}(h!``0`` - The timer was not pendingh]jM)}(hjh](jS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh - The timer was not pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h-``1`` - The timer was pending and deactivatedh]jM)}(hjh](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh( - The timer was pending and deactivated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/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&]j-Cjuh1j ChjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h timer_shutdown_sync (C function)c.timer_shutdown_synchNtauh1hhjSHhhhNhNubh)}(hhh](h)}(h2int timer_shutdown_sync (struct timer_list *timer)h]h)}(h1int timer_shutdown_sync(struct timer_list *timer)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhjohMubh)}(htimer_shutdown_synch]j)}(htimer_shutdown_synch]htimer_shutdown_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhjohMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.timer_shutdown_syncasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj]hhhjohMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjohMubah}(h]jTah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjohMhjVhhubj4)}(hhh]jM)}(h%Shutdown a timer and prevent rearmingh]h%Shutdown a timer and prevent rearming}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjVhhhjohMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjSHhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubj)}(hhh]j)}(h6``struct timer_list *timer`` The timer to be shutdown h](j)}(h``struct timer_list *timer``h]jS)}(hjbh]hstruct timer_list *timer}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj\ubj)}(hhh]jM)}(hThe timer to be shutdownh]hThe timer to be shutdown}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubj)}(hhh]j)}(hWhen the function returns it is guaranteed that: - **timer** is not queued - The callback function of **timer** is not running - **timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h](j)}(h0When the function returns it is guaranteed that:h]h0When the function returns it is guaranteed that:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j C)}(hhh](j)}(h**timer** is not queuedh]jM)}(hjh](j)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not queued}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h1The callback function of **timer** is not runningh]jM)}(hjh](hThe callback function of }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not running}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hX**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h]jM)}(hW**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored.h](j)}(h **timer**h]htimer}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh0 cannot be enqueued again. Any attempt to rearm }(hj#hhhNhNubj)}(h **timer**h]htimer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh is silently ignored.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/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&]j-Cj.Cuh1j ChjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h2See timer_delete_sync() for synchronization rules.h]h2See timer_delete_sync() for synchronization rules.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubjM)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubjM)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubji)}(httimer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `); h]jM)}(hstimer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `);h](htimer_shutdown_sync(}(hjhhhNhNubh)}(h":c:type:`mything->timer `h]jS)}(hjh]hmything->timer}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBmythinguh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubh); workqueue_destroy(}(hjhhhNhNubh)}(h&:c:type:`mything->workqueue `h]jS)}(hjh]hmything->workqueue}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jBmythinguh1hhjhMhjubh);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhj=ubjM)}(h)After this 'mything' can be safely freed.h]h-After this ‘mything’ can be safely freed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubjM)}(hnThis obviously implies that the timer is not required to be functional for the rest of the shutdown operation.h]hnThis obviously implies that the timer is not required to be functional for the rest of the shutdown operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj=ubj C)}(hhh](j)}(h!``0`` - The timer was not pendingh]jM)}(hjFh](jS)}(h``0``h]h0}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubh - The timer was not pending}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubah}(h]h ]h"]h$]h&]uh1jhjAubj)}(h``1`` - The timer was pendingh]jM)}(hjlh](jS)}(h``1``h]h1}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubh - The timer was pending}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjjubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]j-Cjuh1j ChjchMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjSHhhhNhNubeh}(h]time-and-timer-routinesah ]h"]time and timer routinesah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(hHigh-resolution timersh]hHigh-resolution timers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK1ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hktime_set (C function) c.ktime_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h=ktime_t ktime_set (const s64 secs, const unsigned long nsecs)h]h)}(hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hs64h]hs64}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j c.ktime_setasbuh1hhjubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsecsh]hsecs}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst unsigned long nsecsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnsecsh]hnsecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h7Set a ktime_t variable from a seconds/nanoseconds valueh]h7Set a ktime_t variable from a seconds/nanoseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const s64 secs`` seconds to set ``const unsigned long nsecs`` nanoseconds to set **Return** The ktime_t representation of the value.h](jM)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hjubj)}(hhh](j)}(h"``const s64 secs`` seconds to set h](j)}(h``const s64 secs``h]jS)}(hjBh]hconst s64 secs}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj<ubj)}(hhh]jM)}(hseconds to seth]hseconds to set}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKhj9ubj)}(h1``const unsigned long nsecs`` nanoseconds to set h](j)}(h``const unsigned long nsecs``h]jS)}(hj{h]hconst unsigned long nsecs}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK hjuubj)}(hhh]jM)}(hnanoseconds to seth]hnanoseconds to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhK hj9ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hjubjM)}(h(The ktime_t representation of the value.h]h(The ktime_t representation of the value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hktime_compare (C function)c.ktime_comparehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:int ktime_compare (const ktime_t cmp1, const ktime_t cmp2)h]h)}(h9int ktime_compare(const ktime_t cmp1, const ktime_t cmp2)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKTubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKTubh)}(h ktime_compareh]j)}(h ktime_compareh]h ktime_compare}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKTubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hj h]hconst}(hj8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj4ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]j)}(hktime_th]hktime_t}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsjsbc.ktime_compareasbuh1hhj4ubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(hconst ktime_t cmp2h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jrc.ktime_compareasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hKTubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hKTubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKThjhhubj4)}(hhh]jM)}(h9Compares two ktime_t variables for less, greater or equalh]h9Compares two ktime_t variables for less, greater or equal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKThjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hKTubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhj-ubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjRh]hconst ktime_t cmp1}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKUhjLubj)}(hhh]jM)}(h comparable1h]h comparable1}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghKUhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKUhjIubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]jS)}(hjh]hconst ktime_t cmp2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKVhjubj)}(hhh]jM)}(h comparable2h]h comparable2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhj-ubjM)}(hJ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h]hJ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hktime_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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKgubh)}(h ktime_afterh]j)}(h ktime_afterh]h ktime_after}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKgubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hj h]hconst}(hjGhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjCubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubh)}(hhh]j)}(hktime_th]hktime_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsj-sb c.ktime_afterasbuh1hhjCubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?ubj:)}(hconst ktime_t cmp2h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.ktime_afterasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKgubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKghjhhubj4)}(hhh]jM)}(h6Compare if a ktime_t value is bigger than another one.h]h6Compare if a ktime_t value is bigger than another one.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKghjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened after cmp2.h](jM)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhj<ubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjah]hconst ktime_t cmp1}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhhj[ubj)}(hhh]jM)}(h comparable1h]h comparable1}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhKhhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhKhhjXubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]jS)}(hjh]hconst ktime_t cmp2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKihjubj)}(hhh]jM)}(h comparable2h]h comparable2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhj<ubjM)}(h!true if cmp1 happened after cmp2.h]h!true if cmp1 happened after cmp2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hktime_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKsubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hKsubh)}(h ktime_beforeh]j)}(h ktime_beforeh]h ktime_before}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hKsubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hj h]hconst}(hjVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubh)}(hhh]j)}(hktime_th]hktime_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsj<sbc.ktime_beforeasbuh1hhjRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hconst ktime_t cmp2h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ktime_beforeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj'hKsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj'hKsubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hKshjhhubj4)}(hhh]jM)}(h7Compare if a ktime_t value is smaller than another one.h]h7Compare if a ktime_t value is smaller than another one.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKshj,hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hKsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened before cmp2.h](jM)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjKubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjph]hconst ktime_t cmp1}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKthjjubj)}(hhh]jM)}(h comparable1h]h comparable1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjgubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]jS)}(hjh]hconst ktime_t cmp2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKuhjubj)}(hhh]jM)}(h comparable2h]h comparable2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKuhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjKubjM)}(h"true if cmp1 happened before cmp2.h]h"true if cmp1 happened before cmp2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj6hKubh)}(hktime_to_timespec64_condh]j)}(hktime_to_timespec64_condh]hktime_to_timespec64_cond}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj6hKubj4)}(h)(const ktime_t kt, struct timespec64 *ts)h](j:)}(hconst ktime_t kth](j?)}(hj h]hconst}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjaubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubh)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjKsbc.ktime_to_timespec64_condasbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hkth]hkt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubj:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ktime_to_timespec64_condasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htsh]hts}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj6hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj6hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hKhjhhubj4)}(hhh]jM)}(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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj6hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjgubj)}(hhh](j)}(h5``const ktime_t kt`` the ktime_t variable to convert h](j)}(h``const ktime_t kt``h]jS)}(hjh]hconst ktime_t kt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj)}(hhh]jM)}(hthe ktime_t variable to converth]hthe ktime_t variable to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hG``struct timespec64 *ts`` the timespec variable to store the result in h](j)}(h``struct timespec64 *ts``h]jS)}(hjh]hstruct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj)}(hhh]jM)}(h,the timespec variable to store the result inh]h,the timespec variable to store the result in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjgubjM)}(hE``true`` if there was a successful conversion, ``false`` if kt was 0.h](jS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh' if there was a successful conversion, }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh if kt was 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_sleeper (C struct)c.hrtimer_sleeperhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhrtimer_sleeperh]h)}(hstruct hrtimer_sleeperh](j?)}(hjBh]hstruct}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjahhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjrhKubh)}(hhrtimer_sleeperh]j)}(hj_h]hhrtimer_sleeper}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjrhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjrhKubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhKhjZhhubj4)}(hhh]jM)}(hsimple sleeper structureh]hsimple sleeper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKDhjhhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjrhKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Definition**:: struct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; }; **Members** ``timer`` embedded timer structure ``task`` task to wake uph](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKHhjubj)}(hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };h]hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKJhjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKOhjubj)}(hhh](j)}(h#``timer`` embedded timer structure h](j)}(h ``timer``h]jS)}(hjh]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKFhjubj)}(hhh]jM)}(hembedded timer structureh]hembedded timer structure}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hKFhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKFhj ubj)}(h``task`` task to wake uph](j)}(h``task``h]jS)}(hjMh]htask}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKFhjGubj)}(hhh]jM)}(htask to wake uph]htask to wake up}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKGhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKFhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKJhjhhubjM)}(h,task is set to NULL, when the timer expires.h]h,task is set to NULL, when the timer expires.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKGhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h hrtimer_starth]j)}(h hrtimer_starth]h hrtimer_start}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(hB(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_startasbuh1hhjubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h ktime_t timh](h)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jEc.hrtimer_startasbuh1hhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(htimh]htim}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst enum hrtimer_mode modeh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(henumh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jEc.hrtimer_startasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjRhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjmjHjmjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjqubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubj)}(hhh]jM)}(hthe timer to be addedh]hthe timer to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]jS)}(hjh]h ktime_t tim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubj)}(hhh]jM)}(h expiry timeh]h expiry time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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]jS)}(hjh]hconst enum hrtimer_mode mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubj)}(hhh]jM)}(htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h]htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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]j)}(hktime_th]hktime_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jshrtimer_get_remainingsbc.hrtimer_get_remainingasbuh1hhj^hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhjhMubh)}(hhrtimer_get_remainingh]j)}(hjh]hhrtimer_get_remaining}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^hhhjhMubj4)}(h(const struct hrtimer *timer)h]j:)}(hconst struct hrtimer *timerh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_get_remainingasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj^hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZhhhjhMubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjWhhubj4)}(hhh]jM)}(h get remaining time for the timerh]h get remaining time for the timer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(hC**Parameters** ``const struct hrtimer *timer`` the timer to readh](jM)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjlubj)}(hhh]j)}(h1``const struct hrtimer *timer`` the timer to readh](j)}(h``const struct hrtimer *timer``h]jS)}(hjh]hconst struct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjubj)}(hhh]jM)}(hthe timer to readh]hthe timer to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_is_queuedh]j)}(hhrtimer_is_queuedh]hhrtimer_is_queued}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct hrtimer *timer)h]j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hj'hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj#ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsj sbc.hrtimer_is_queuedasbuh1hhj#ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h0check, whether the timer is on one of the queuesh]h0check, whether the timer is on one of the queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubj)}(hhh]j)}(h)``struct hrtimer *timer`` Timer to check h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubj)}(hhh]jM)}(hTimer to checkh]hTimer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubjM)}(h,True if the timer is queued, false otherwiseh]h,True if the timer is queued, false otherwise}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubjM)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$hrtimer_update_function (C function)c.hrtimer_update_functionhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhvoid hrtimer_update_function (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *))h]h)}(hfvoid hrtimer_update_function(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*))h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM,ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM,ubh)}(hhrtimer_update_functionh]j)}(hhrtimer_update_functionh]hhrtimer_update_function}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM,ubj4)}(hJ(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*))h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_update_functionasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjh]henum}(hjAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(hhrtimer_restarth]hhrtimer_restart}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j c.hrtimer_update_functionasbuh1hhj=ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hfunctionh]hfunction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.hrtimer_update_functionasbuh1hhj=ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM,ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM,hjhhubj4)}(hhh]jM)}(h$Update the timer's callback functionh]h&Update the timer’s callback function}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM,hj<hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(hXS**Parameters** ``struct hrtimer *timer`` Timer to update ``enum hrtimer_restart (*function)(struct hrtimer *)`` New callback function **Description** Only safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).h](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM0hj[ubj)}(hhh](j)}(h*``struct hrtimer *timer`` Timer to update h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM-hjzubj)}(hhh]jM)}(hTimer to updateh]hTimer to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjwubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` New callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]jS)}(hjh]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM.hjubj)}(hhh]jM)}(hNew callback functionh]hNew callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM0hj[ubjM)}(hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).h]hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM/hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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]j)}(hu64h]hu64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jshrtimer_forward_nowsbc.hrtimer_forward_nowasbuh1hhj5hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMGubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhj]hMGubh)}(hhrtimer_forward_nowh]j)}(hjZh]hhrtimer_forward_now}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhj]hMGubj4)}(h)(struct hrtimer *timer, ktime_t interval)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jXc.hrtimer_forward_nowasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hktime_t intervalh](h)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jXc.hrtimer_forward_nowasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hintervalh]hinterval}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhj]hMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhj]hMGubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]hMGhj.hhubj4)}(hhh]jM)}(h0forward the timer expiry so it expires after nowh]h0forward the timer expiry so it expires after now}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMGhjQhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhj]hMGubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMKhjpubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMHhjubj)}(hhh]jM)}(hhrtimer to forwardh]hhrtimer to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]jS)}(hjh]hktime_t interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMIhjubj)}(hhh]jM)}(hthe interval to forwardh]hthe interval to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubeh}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMKhjpubjM)}(hIt is a variant of hrtimer_forward(). The timer will expire after the current time of the hrtimer clock base. See hrtimer_forward() for details.h]hIt is a variant of hrtimer_forward(). The timer will expire after the current time of the hrtimer clock base. See hrtimer_forward() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMJhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_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]j)}(hu64h]hu64}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jshrtimer_forwardsbc.hrtimer_forwardasbuh1hhjJhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjrhMubh)}(hhrtimer_forwardh]j)}(hjoh]hhrtimer_forward}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjrhMubj4)}(h6(struct hrtimer *timer, ktime_t now, ktime_t interval)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jmc.hrtimer_forwardasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h ktime_t nowh](h)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jmc.hrtimer_forwardasbuh1hhj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnowh]hnow}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hktime_t intervalh](h)}(hhh]j)}(hktime_th]hktime_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]jmc.hrtimer_forwardasbuh1hhjTubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hintervalh]hinterval}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjJhhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjrhMubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjChhubj4)}(hhh]jM)}(hforward the timer expiryh]hforward the timer expiry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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 this 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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hhrtimer to forwardh]hhrtimer to forward}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``ktime_t now`` forward past this time h](j)}(h``ktime_t now``h]jS)}(hj+h]h ktime_t now}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj%ubj)}(hhh]jM)}(hforward past this timeh]hforward past this time}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]jS)}(hjdh]hktime_t interval}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj^ubj)}(hhh]jM)}(hthe interval to forwardh]hthe interval to forward}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjM)}(h9Forward the timer expiry so it will expire in the future.h]h9Forward the timer expiry so it will expire in the future.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubhnote)}(hHThis only updates the timer expiry value and does not requeue the timer.h]jM)}(hjh]hHThis only updates the timer expiry value and does not requeue the timer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h@There is also a variant of this function: hrtimer_forward_now().h]h@There is also a variant of this function: hrtimer_forward_now().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjM)}(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 }(hjhhhNhNubj)}(h **timer**h]htimer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . If called from other contexts }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhf must neither be enqueued nor running the callback and the caller needs to take care of serialization.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjM)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM#hjubjM)}(h$The number of overruns are returned.h]h$The number of overruns are returned.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM#hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhMubh)}(hhrtimer_start_range_nsh]j)}(hhrtimer_start_range_nsh]hhrtimer_start_range_ns}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhjhMubj4)}(hP(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_start_range_nsasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h ktime_t timh](h)}(hhh]j)}(hktime_th]hktime_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]jc.hrtimer_start_range_nsasbuh1hhj*ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(htimh]htim}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h u64 delta_nsh](h)}(hhh]j)}(hu64h]hu64}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]jc.hrtimer_start_range_nsasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hdelta_nsh]hdelta_ns}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst enum hrtimer_mode modeh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_start_range_nsasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj{hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjhMubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjthhubj4)}(hhh]jM)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjiubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe timer to be addedh]hthe timer to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]jS)}(hjh]h ktime_t tim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(h expiry timeh]h expiry time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``u64 delta_ns`` "slack" range for the timer h](j)}(h``u64 delta_ns``h]jS)}(hjh]h u64 delta_ns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(h"slack" range for the timerh]h“slack” range for the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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]jS)}(hj9h]hconst enum hrtimer_mode mode}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj3ubj)}(hhh]jM)}(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!}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjubeh}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(hrtimer_start_range_ns_user (C function)c.hrtimer_start_range_ns_userhNtauh1hhjhhhNhNubh)}(hhh](h)}(hqbool hrtimer_start_range_ns_user (struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h]h)}(hpbool hrtimer_start_range_ns_user(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_start_range_ns_userh]j)}(hhrtimer_start_range_ns_userh]hhrtimer_start_range_ns_user}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hP(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_start_range_ns_userasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h ktime_t timh](h)}(hhh]j)}(hktime_th]hktime_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j c.hrtimer_start_range_ns_userasbuh1hhj=ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(htimh]htim}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h u64 delta_nsh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.hrtimer_start_range_ns_userasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hdelta_nsh]hdelta_ns}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst enum hrtimer_mode modeh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j c.hrtimer_start_range_ns_userasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$(re)start an user controlled hrtimerh]h$(re)start an user controlled hrtimer}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj]hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(hXq**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! **Return** True when the timer was queued, false if it was already expired **Description** This function cannot invoke the timer callback for expired timers as it might be called under a lock which the timer callback needs to acquire. So the caller has to handle that case.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe timer to be addedh]hthe timer to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]jS)}(hjh]h ktime_t tim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(h expiry timeh]h expiry time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``u64 delta_ns`` "slack" range for the timer h](j)}(h``u64 delta_ns``h]jS)}(hjh]h u64 delta_ns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(h"slack" range for the timerh]h“slack” range for the timer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(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]jS)}(hjLh]hconst enum hrtimer_mode mode}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjFubj)}(hhh]jM)}(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!}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubjM)}(h?True when the timer was queued, false if it was already expiredh]h?True when the timer was queued, false if it was already expired}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubjM)}(hThis function cannot invoke the timer callback for expired timers as it might be called under a lock which the timer callback needs to acquire. So the caller has to handle that case.h]hThis function cannot invoke the timer callback for expired timers as it might be called under a lock which the timer callback needs to acquire. So the caller has to handle that case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMAubh)}(hhrtimer_try_to_cancelh]j)}(hhrtimer_try_to_cancelh]hhrtimer_try_to_cancel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMAubj4)}(h(struct hrtimer *timer)h]j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj-ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_try_to_cancelasbuh1hhj-ubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMAhjhhubj4)}(hhh]jM)}(htry to deactivate a timerh]htry to deactivate a timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct hrtimer *timer`` hrtimer to stop **Description** * 0 when the timer was not active * 1 when the timer was active * -1 when the timer is currently executing the callback function and cannot be stoppedh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMEhjubj)}(hhh]j)}(h*``struct hrtimer *timer`` hrtimer to stop h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMBhjubj)}(hhh]jM)}(hhrtimer to stoph]hhrtimer to stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMBhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMBhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMDhjubji)}(h* 0 when the timer was not active * 1 when the timer was active * -1 when the timer is currently executing the callback function and cannot be stoppedh]j C)}(hhh](j)}(h0 when the timer was not activeh]jM)}(hjOh]h0 when the timer was not active}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMEhjMubah}(h]h ]h"]h$]h&]uh1jhjJubj)}(h1 when the timer was activeh]jM)}(hjgh]h1 when the timer was active}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMFhjeubah}(h]h ]h"]h$]h&]uh1jhjJubj)}(hT-1 when the timer is currently executing the callback function and cannot be stoppedh]jM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMGhj}ubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]j-Cjuh1j Chj^hMEhjFubah}(h]h ]h"]h$]h&]uh1jhhj^hMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_cancelh]j)}(hhrtimer_cancelh]hhrtimer_cancel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct hrtimer *timer)h]j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_cancelasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h2cancel a timer and wait for the handler to finish.h]h2cancel a timer and wait for the handler to finish.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct hrtimer *timer`` the timer to be cancelled **Return** 0 when the timer was not active 1 when the timer was activeh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j)}(h4``struct hrtimer *timer`` the timer to be cancelled h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe timer to be cancelledh]hthe timer to be cancelled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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]j)}(hktime_th]hktime_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}js__hrtimer_get_remainingsbc.__hrtimer_get_remainingasbuh1hhj?hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhjghMubh)}(h__hrtimer_get_remainingh]j)}(hjdh]h__hrtimer_get_remaining}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhjghMubj4)}(h*(const struct hrtimer *timer, bool adjust)h](j:)}(hconst struct hrtimer *timerh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jbc.__hrtimer_get_remainingasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h bool adjusth](j)}(hjh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hadjusth]hadjust}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj?hhhjghMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhjghMubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjghMhj8hhubj4)}(hhh]jM)}(h get remaining time for the timerh]h get remaining time for the timer}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhjghMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const struct hrtimer *timer`` the timer to read ``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/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]jS)}(hjh]hconst struct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe timer to readh]hthe timer to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](j)}(h``bool adjust``h]jS)}(hjh]h bool adjust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(h1adjust relative timers when CONFIG_TIME_LOW_RES=yh]h1adjust relative timers when CONFIG_TIME_LOW_RES=y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_setup (C function)c.hrtimer_setuphNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid hrtimer_setup (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *), clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hvoid hrtimer_setup(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMuubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhMuubh)}(h hrtimer_setuph]j)}(h hrtimer_setuph]h hrtimer_setup}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhMuubj4)}(hv(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj\sbc.hrtimer_setupasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimer_restarth]hhrtimer_restart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_setupasbuh1hhjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfunctionh]hfunction}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjthhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_setupasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(hclockid_t clock_idh](h)}(hhh]j)}(h clockid_th]h clockid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_setupasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hclock_idh]hclock_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(henum hrtimer_mode modeh](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]jc.hrtimer_setupasbuh1hhjubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjGhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhMuubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhMuhj.hhubj4)}(hhh]jM)}(h%initialize a timer to the given clockh]h%initialize a timer to the given clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMuhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``struct hrtimer *timer`` the timer to be initialized ``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function ``clockid_t clock_id`` the clock to be used ``enum hrtimer_mode mode`` The modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT **Description** The PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMyhjubj)}(hhh](j)}(h6``struct hrtimer *timer`` the timer to be initialized h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMvhjubj)}(hhh]jM)}(hthe timer to be initializedh]hthe timer to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]jS)}(hj h]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMwhjubj)}(hhh]jM)}(hthe callback functionh]hthe callback function}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMwhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMwhjubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]jS)}(hjDh]hclockid_t clock_id}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMxhj>ubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMxhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMxhjubj)}(h``enum hrtimer_mode mode`` The modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT h](j)}(h``enum hrtimer_mode mode``h]jS)}(hj}h]henum hrtimer_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM{hjwubj)}(hhh]jM)}(hThe modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFTh]hThe modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMyhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM}hjubji)}(hThe PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh]jM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM|hjubah}(h]h ]h"]h$]h&]uh1jhhjhM|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#hrtimer_setup_on_stack (C function)c.hrtimer_setup_on_stackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid hrtimer_setup_on_stack (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *), clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hvoid hrtimer_setup_on_stack(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_setup_on_stackh]j)}(hhrtimer_setup_on_stackh]hhrtimer_setup_on_stack}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hv(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjAubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsj+sbc.hrtimer_setup_on_stackasbuh1hhjAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimer_restarth]hhrtimer_restart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_setup_on_stackasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfunctionh]hfunction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]jc.hrtimer_setup_on_stackasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hclockid_t clock_idh](h)}(hhh]j)}(h clockid_th]h clockid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_setup_on_stackasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hclock_idh]hclock_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(henum hrtimer_mode modeh](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jc.hrtimer_setup_on_stackasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h"initialize a timer on stack memoryh]h"initialize a timer on stack memory}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj]hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(hXi**Parameters** ``struct hrtimer *timer`` The timer to be initialized ``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function ``clockid_t clock_id`` The clock to be used ``enum hrtimer_mode mode`` The timer mode **Description** Similar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubj)}(hhh](j)}(h6``struct hrtimer *timer`` The timer to be initialized h](j)}(h``struct hrtimer *timer``h]jS)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hThe timer to be initializedh]hThe timer to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]jS)}(hjh]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe callback functionh]hthe callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``clockid_t clock_id`` The clock to be used h](j)}(h``clockid_t clock_id``h]jS)}(hjh]hclockid_t clock_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(hThe clock to be usedh]hThe clock to be used}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h*``enum hrtimer_mode mode`` The timer mode h](j)}(h``enum hrtimer_mode mode``h]jS)}(hjLh]henum hrtimer_mode mode}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjFubj)}(hhh]jM)}(hThe timer modeh]hThe timer mode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubjM)}(hcSimilar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.h]hcSimilar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_sleeper_start_expiresh]j)}(hhrtimer_sleeper_start_expiresh]hhrtimer_sleeper_start_expires}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h4(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j:)}(hstruct hrtimer_sleeper *slh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_sleeper_start_expiresasbuh1hhjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hslh]hsl}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum hrtimer_mode modeh](j?)}(hjh]henum}(hj{hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jCc.hrtimer_sleeper_start_expiresasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hStart a hrtimer sleeper timerh]hStart a hrtimer sleeper timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh](j)}(h5``struct hrtimer_sleeper *sl`` sleeper to be started h](j)}(h``struct hrtimer_sleeper *sl``h]jS)}(hj0h]hstruct hrtimer_sleeper *sl}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj*ubj)}(hhh]jM)}(hsleeper to be startedh]hsleeper to be started}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h.``enum hrtimer_mode mode`` timer mode abs/rel h](j)}(h``enum hrtimer_mode mode``h]jS)}(hjih]henum hrtimer_mode mode}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjcubj)}(hhh]jM)}(htimer mode abs/relh]htimer mode abs/rel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubjM)}(hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)h]hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+hrtimer_setup_sleeper_on_stack (C function) c.hrtimer_setup_sleeper_on_stackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hlvoid hrtimer_setup_sleeper_on_stack (struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hkvoid hrtimer_setup_sleeper_on_stack(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM6 ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM6 ubh)}(hhrtimer_setup_sleeper_on_stackh]j)}(hhrtimer_setup_sleeper_on_stackh]hhrtimer_setup_sleeper_on_stack}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM6 ubj4)}(hH(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j:)}(hstruct hrtimer_sleeper *slh](j?)}(hjBh]hstruct}(hj&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsj sb c.hrtimer_setup_sleeper_on_stackasbuh1hhj"ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hslh]hsl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hclockid_t clock_idh](h)}(hhh]j)}(h clockid_th]h clockid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j` c.hrtimer_setup_sleeper_on_stackasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hclock_idh]hclock_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum hrtimer_mode modeh](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j` c.hrtimer_setup_sleeper_on_stackasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM6 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM6 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM6 hjhhubj4)}(hhh]jM)}(h$initialize a sleeper in stack memoryh]h$initialize a sleeper in stack memory}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM6 hjQhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM6 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM: hjpubj)}(hhh](j)}(h9``struct hrtimer_sleeper *sl`` sleeper to be initialized h](j)}(h``struct hrtimer_sleeper *sl``h]jS)}(hjh]hstruct hrtimer_sleeper *sl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM7 hjubj)}(hhh]jM)}(hsleeper to be initializedh]hsleeper to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM7 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7 hjubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]jS)}(hjh]hclockid_t clock_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM8 hjubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM8 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8 hjubj)}(h-``enum hrtimer_mode mode`` timer mode abs/relh](j)}(h``enum hrtimer_mode mode``h]jS)}(hjh]henum hrtimer_mode mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM: hjubj)}(hhh]jM)}(htimer mode abs/relh]htimer mode abs/rel}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM9 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&]uh1jhjhhhNhNubeh}(h]high-resolution-timersah ]h"]high-resolution timersah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hWait queues and Wake eventsh]hWait queues and Wake events}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhhhK=ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwaitqueue_active (C function)c.waitqueue_activehNtauh1hhjPhhhNhNubh)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjhK`ubh)}(hwaitqueue_activeh]j)}(hwaitqueue_activeh]hwaitqueue_active}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjhK`ubj4)}(h!(struct wait_queue_head *wq_head)h]j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.waitqueue_activeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hwq_headh]hwq_head}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjhK`ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjhK`ubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK`hjohhubj4)}(hhh]j C)}(hhh]j)}(h(locklessly test for waiters on the queueh]jM)}(hj?h]h(locklessly test for waiters on the queue}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK`hj=ubah}(h]h ]h"]h$]h&]uh1jhj:hhhjNhNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j ChjNhK`hj7hhubah}(h]h ]h"]h$]h&]uh1j3hjohhhjhK`ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjPhNhNubj)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue to test for waiters **Description** returns true if the wait list is not empty **NOTE** this function is lockless and requires care, incorrect usage _will_ lead to sporadic and non-obvious failure. Use either while holding wait_queue_head::lock or when used for wakeups with an extra smp_mb() like:: CPU0 - waker CPU1 - waiter for (;;) { @cond = true; prepare_to_wait(&wq_head, &wait, state); smp_mb(); // smp_mb() from set_current_state() if (waitqueue_active(wq_head)) if (@cond) wake_up(wq_head); break; schedule(); } finish_wait(&wq_head, &wait); Because without the explicit smp_mb() it's possible for the waitqueue_active() load to get hoisted over the **cond** store such that we'll observe an empty wait list while the waiter might not observe **cond**. Also note that this 'optimization' trades a spin_lock() for an smp_mb(), which (when the lock is uncontended) are of roughly equal cost.h](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKdhjhubj)}(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]jS)}(hjh]hstruct wait_queue_head *wq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKahjubj)}(hhh]jM)}(h!the waitqueue to test for waitersh]h!the waitqueue to test for waiters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKchjhubjM)}(h*returns true if the wait list is not emptyh]h*returns true if the wait list is not empty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKbhjhubjM)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKdhjhubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKehjhubjM)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhhjhubj)}(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);}hj#sbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKkhjhubjM)}(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 }(hj2hhhNhNubj)}(h**cond**h]hcond}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubhW store such that we’ll observe an empty wait list while the waiter might not observe }(hj2hhhNhNubj)}(h**cond**h]hcond}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKvhjhubjM)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKzhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"wq_has_single_sleeper (C function)c.wq_has_single_sleeperhNtauh1hhjPhhhNhNubh)}(hhh](h)}(hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.wq_has_single_sleeperasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hwq_headh]hwq_head}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h"check if there is only one sleeperh]h"check if there is only one sleeper}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjPhNhNubj)}(h**Parameters** ``struct wait_queue_head *wq_head`` wait queue head **Description** Returns true of wq_head has only one sleeper on the list. Please refer to the comment for waitqueue_active.h](jM)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjoubj)}(hhh]j)}(h4``struct wait_queue_head *wq_head`` wait queue head h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hjh]hstruct wait_queue_head *wq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj)}(hhh]jM)}(hwait queue headh]hwait queue head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjoubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjoubjM)}(h9Returns true of wq_head has only one sleeper on the list.h]h9Returns true of wq_head has only one sleeper on the list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjoubjM)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwq_has_sleeper (C function)c.wq_has_sleeperhNtauh1hhjPhhhNhNubh)}(hhh](h)}(h5bool wq_has_sleeper (struct wait_queue_head *wq_head)h]h)}(h4bool wq_has_sleeper(struct wait_queue_head *wq_head)h](j)}(hjh]hbool}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hKubh)}(hwq_has_sleeperh]j)}(hwq_has_sleeperh]hwq_has_sleeper}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hKubj4)}(h!(struct wait_queue_head *wq_head)h]j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hj_hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjEsbc.wq_has_sleeperasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hwq_headh]hwq_head}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj0hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj0hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hKhjhhubj4)}(hhh]jM)}(h(check if there are any waiting processesh]h(check if there are any waiting processes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj)}(hhh]j)}(h4``struct wait_queue_head *wq_head`` wait queue head h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj#h]hstruct wait_queue_head *wq_head}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj)}(hhh]jM)}(hwait queue headh]hwait queue head}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubjM)}(h-Returns true if wq_head has waiting processesh]h-Returns true if wq_head has waiting processes}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubjM)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwake_up_pollfree (C function)c.wake_up_pollfreehNtauh1hhjPhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hwake_up_pollfreeh]j)}(hwake_up_pollfreeh]hwake_up_pollfree}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h!(struct wait_queue_head *wq_head)h]j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.wake_up_pollfreeasbuh1hhjubjQ)}(h h]h }(hj- hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hwq_headh]hwq_head}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h,signal that a polled waitqueue is going awayh]h,signal that a polled waitqueue is going away}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjo hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjPhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubj)}(hhh]j)}(h8``struct wait_queue_head *wq_head`` the wait queue head h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj h]hstruct wait_queue_head *wq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubj)}(hhh]jM)}(hthe wait queue headh]hthe wait queue head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event (C macro) c.wait_eventhNtauh1hhjPhhhNhNubh)}(hhh](h)}(h wait_eventh]h)}(h wait_eventh]h)}(h wait_eventh]j)}(hj< h]h wait_event}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj> hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMNubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj: hhhjY hMNubah}(h]j5 ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjY hMNhj7 hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj7 hhhjY hMNubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjr jHjr jIjJjKuh1hhhhjPhNhNubjM)}(h#``wait_event (wq_head, condition)``h]jS)}(hjx h]hwait_event (wq_head, condition)}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjv ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMNhj ubah}(h]h ]h"]h$]h&]uh1jhhj hMNhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMOhj ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMOhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMOhj ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhj ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMPhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMPhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj@ h]h Description}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj> ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj ubjM)}(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 }(hjV hhhNhNubj)}(h **condition**h]h condition}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh evaluates to true. The }(hjV hhhNhNubj)}(h **condition**h]h condition}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh$ is checked each time the waitqueue }(hjV hhhNhNubj)}(h **wq_head**h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh is woken up.}(hjV hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMQhj ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_freezable (C macro)c.wait_event_freezablehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]j)}(hj h]hwait_event_freezable}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMuubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMuhj hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj hhhj hMuubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjPhNhNubjM)}(h-``wait_event_freezable (wq_head, condition)``h]jS)}(hj h]h)wait_event_freezable (wq_head, condition)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhjPhhubji)}(h.sleep (or freeze) until a condition gets true h]jM)}(h-sleep (or freeze) until a condition gets trueh]h-sleep (or freeze) until a condition gets true}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuhj ubah}(h]h ]h"]h$]h&]uh1jhhj( hMuhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj5 h]h Parameters}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhj/ ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjT h]hwq_head}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjR ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjN ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhji hMvhjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]uh1jhji hMvhjK ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhj ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMwhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMwhjK ubeh}(h]h ]h"]h$]h&]uh1jhj/ ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhj/ ubjM)}(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 }(hj hhhNhNubj)}(h **condition**h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh evaluates to true. The }(hj hhhNhNubj)}(h **condition**h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh$ is checked each time the waitqueue }(hj hhhNhNubj)}(h **wq_head**h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is woken up.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMxhj/ ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM|hj/ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_timeout (C macro)c.wait_event_timeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]j)}(hjL h]hwait_event_timeout}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjN hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJ hhhji hMubah}(h]jE ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhji hMhjG hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjG hhhji hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjPhNhNubjM)}(h4``wait_event_timeout (wq_head, condition, timeout)``h]jS)}(hj h]h0wait_event_timeout (wq_head, condition, timeout)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h7sleep until a condition gets true or a timeout elapses h]jM)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhhj hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hj h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hjNh]htimeout}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjHubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh evaluates to true. The }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is checked each time the waitqueue }(hjhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is woken up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubjM)}(hX 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](h 0 if the }(hj hhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh evaluated to }(hj hhhNhNubjS)}(h ``false``h]hfalse}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh after the }(hj hhhNhNubj)}(h **timeout**h]htimeout}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh elapsed, 1 if the }(hj hhhNhNubj)}(h **condition**h]h condition}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh evaluated to }hj sbjS)}(h``true``h]htrue}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh after the }hj sbj)}(h **timeout**h]htimeout}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hj hhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh evaluated to }(hj hhhNhNubjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh before the }(hj hhhNhNubj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh elapsed.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_cmd (C macro)c.wait_event_cmdhNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]j)}(hjh]hwait_event_cmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjPhNhNubjM)}(h3``wait_event_cmd (wq_head, condition, cmd1, cmd2)``h]jS)}(hjh]h/wait_event_cmd (wq_head, condition, cmd1, cmd2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj(ubah}(h]h ]h"]h$]h&]uh1jhhj:hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hjfh]hwq_head}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj`ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{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]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubj)}(h3``cmd1`` the command will be executed before sleep h](j)}(h``cmd1``h]jS)}(hjh]hcmd1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h)the command will be executed before sleeph]h)the command will be executed before sleep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubj)}(h2``cmd2`` the command will be executed after sleep h](j)}(h``cmd2``h]jS)}(hjh]hcmd2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubj)}(hhh]jM)}(h(the command will be executed after sleeph]h(the command will be executed after sleep}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubjM)}(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 }(hjbhhhNhNubj)}(h **condition**h]h condition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh evaluates to true. The }(hjbhhhNhNubj)}(h **condition**h]h condition}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh$ is checked each time the waitqueue }(hjbhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh is woken up.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"wait_event_interruptible (C macro)c.wait_event_interruptiblehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]j)}(hjh]hwait_event_interruptible}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubjM)}(h1``wait_event_interruptible (wq_head, condition)``h]jS)}(hj h]h-wait_event_interruptible (wq_head, condition)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj"ubah}(h]h ]h"]h$]h&]uh1jhhj4hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hj`h]hwq_head}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjZubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 evaluates to true or a signal is received. The }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is checked each time the waitqueue }(hjhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is woken up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubjM)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj>hhhNhNubj)}(h **condition**h]h condition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh evaluated to true.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*wait_event_interruptible_timeout (C macro)"c.wait_event_interruptible_timeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]j)}(hjyh]h wait_event_interruptible_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjhMubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjthhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjthhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubjM)}(hB``wait_event_interruptible_timeout (wq_head, condition, timeout)``h]jS)}(hjh]h>wait_event_interruptible_timeout (wq_head, condition, timeout)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h7sleep until a condition gets true or a timeout elapses h]jM)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjBh]h condition}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj<ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj{h]htimeout}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjuubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hjubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 evaluates to true or a signal is received. The }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is checked each time the waitqueue }(hjhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is woken up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hjubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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 }(hj8hhhNhNubj)}(h **condition**h]h condition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh evaluated to }(hj8hhhNhNubjS)}(h ``false``h]hfalse}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubh after the }(hj8hhhNhNubj)}(h **timeout**h]htimeout}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh elapsed, 1 if the }(hj8hhhNhNubj)}(h **condition**h]h condition}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh evaluated to }hj8sbjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubh after the }hj8sbj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh4 elapsed, the remaining jiffies (at least 1) if the }(hj8hhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh evaluated to }(hj8hhhNhNubjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubh before the }(hj8hhhNhNubj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh elapsed, or -}(hj8hhhNhNubjS)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubh# if it was interrupted by a signal.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_hrtimeout (C macro)c.wait_event_hrtimeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]j)}(hjh]hwait_event_hrtimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hM;ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hM;hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhj2hM;ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjPhNhNubjM)}(h6``wait_event_hrtimeout (wq_head, condition, timeout)``h]jS)}(hjQh]h2wait_event_hrtimeout (wq_head, condition, timeout)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM=hjPhhubji)}(h7sleep until a condition gets true or a timeout elapses h]jM)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hjgubah}(h]h ]h"]h$]h&]uh1jhhjyhM;hjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hjubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjh]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM<hjubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM=hjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]jS)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hjubj)}(hhh]jM)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM>hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM>hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM@hjubjM)}(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 }(hjhhhhNhNubj)}(h **condition**h]h condition}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh0 evaluates to true or a signal is received. The }(hjhhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh$ is checked each time the waitqueue }(hjhhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh is woken up.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMChjubjM)}(hVThe function returns 0 if **condition** became true, or -ETIME if the timeout elapsed.h](hThe function returns 0 if }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ became true, or -ETIME if the timeout elapsed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,wait_event_interruptible_hrtimeout (C macro)$c.wait_event_interruptible_hrtimeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]j)}(hjh]h"wait_event_interruptible_hrtimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMUubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMUhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhMUubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjPhNhNubjM)}(h?``wait_event_interruptible_hrtimeout (wq, condition, timeout)``h]jS)}(hj3h]h;wait_event_interruptible_hrtimeout (wq, condition, timeout)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjPhhubji)}(h7sleep until a condition gets true or a timeout elapses h]jM)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjIubah}(h]h ]h"]h$]h&]uh1jhhj[hMUhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhjbubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]jS)}(hjh]hwq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhjubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMVhj~ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhj~ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]jS)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhjubj)}(hhh]jM)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhjbubjM)}(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 }(hjJhhhNhNubj)}(h **condition**h]h condition}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh0 evaluates to true or a signal is received. The }(hjJhhhNhNubj)}(h **condition**h]h condition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh$ is checked each time the waitqueue }(hjJhhhNhNubj)}(h**wq**h]hwq}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh is woken up.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhjbubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM]hjbubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh_ became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM`hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_idle (C macro)c.wait_event_idlehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hwait_event_idleh]j)}(hjh]hwait_event_idle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubjM)}(h(``wait_event_idle (wq_head, condition)``h]jS)}(hjh]h$wait_event_idle (wq_head, condition)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h9wait for a condition without contributing to system load h]jM)}(h8wait for a condition without contributing to system loadh]h8wait for a condition without contributing to system load}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jhhj=hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjih]hwq_head}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh evaluates to true. The }(hjhhhNhNubj)}(h **condition**h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is checked each time the waitqueue }(hjhhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is woken up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubjM)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#wait_event_idle_exclusive (C macro)c.wait_event_idle_exclusivehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]j)}(hjah]hwait_event_idle_exclusive}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhj~hMubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMhj\hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj\hhhj~hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubjM)}(h2``wait_event_idle_exclusive (wq_head, condition)``h]jS)}(hjh]h.wait_event_idle_exclusive (wq_head, condition)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h6wait for a condition with contributing to system load h]jM)}(h5wait for a condition with contributing to system loadh]h5wait for a condition with contributing to system load}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjh]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj*h]h condition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj$ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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 }(hj{hhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh evaluates to true. The }(hj{hhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh$ is checked each time the waitqueue }(hj{hhhNhNubj)}(h **wq_head**h]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh is woken up.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!wait_event_idle_timeout (C macro)c.wait_event_idle_timeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]j)}(hjh]hwait_event_idle_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj.jHj.jIjJjKuh1hhhhjPhNhNubjM)}(h9``wait_event_idle_timeout (wq_head, condition, timeout)``h]jS)}(hj4h]h5wait_event_idle_timeout (wq_head, condition, timeout)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(hGsleep without load until a condition becomes true or a timeout elapses h]jM)}(hFsleep without load until a condition becomes true or a timeout elapsesh]hFsleep without load until a condition becomes true or a timeout elapses}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhhj\hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjh]hwq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubjM)}(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 }(hjKhhhNhNubj)}(h **condition**h]h condition}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh evaluates to true. The }(hjKhhhNhNubj)}(h **condition**h]h condition}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh$ is checked each time the waitqueue }(hjKhhhNhNubj)}(h **wq_head**h]hwq_head}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh is woken up.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubjM)}(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 }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh evaluated to }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh after the }(hjhhhNhNubj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh elapsed, 1 if the }(hjhhhNhNubj)}(h **condition**h]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh evaluated to }hjsbjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh after the }hjsbj)}(h **timeout**h]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 elapsed, or the remaining jiffies (at least 1) if the }(hjhhhNhNubj)}(h **condition**h]h condition}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh evaluated to }(hjhhhNhNubjS)}(h``true``h]htrue}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh before the }(hjhhhNhNubj)}(h **timeout**h]htimeout}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh elapsed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+wait_event_idle_exclusive_timeout (C macro)#c.wait_event_idle_exclusive_timeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]j)}(hjh]h!wait_event_idle_exclusive_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj}hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj}hhhjhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjPhNhNubjM)}(hC``wait_event_idle_exclusive_timeout (wq_head, condition, timeout)``h]jS)}(hjh]h?wait_event_idle_exclusive_timeout (wq_head, condition, timeout)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(hGsleep without load until a condition becomes true or a timeout elapses h]jM)}(hFsleep without load until a condition becomes true or a timeout elapsesh]hFsleep without load until a condition becomes true or a timeout elapses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj h]hwq_head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj' 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]jS)}(hjK h]h condition}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjI ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjE ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj` hMhja ubah}(h]h ]h"]h$]h&]uh1jhjE ubeh}(h]h ]h"]h$]h&]uh1jhj` hMhj ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj h]htimeout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj~ ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj~ ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(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 }(hj hhhNhNubj)}(h **condition**h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh evaluates to true. The }(hj hhhNhNubj)}(h **condition**h]h condition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh$ is checked each time the waitqueue }(hj hhhNhNubj)}(h **wq_head**h]hwq_head}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is woken up.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj)!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjubjM)}(h **Return**h]j)}(hj:!h]hReturn}(hj&h]h Parameters}(hj@&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<&ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj8&ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]jS)}(hj]&h]hwq}(hj_&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThjW&ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjv&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr&hMThjs&ubah}(h]h ]h"]h$]h&]uh1jhjW&ubeh}(h]h ]h"]h$]h&]uh1jhjr&hMThjT&ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj&h]h condition}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj&ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMUhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMUhjT&ubeh}(h]h ]h"]h$]h&]uh1jhj8&ubjM)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj8&ubjM)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj&hhhNhNubj)}(h **condition**h]h condition}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh0 evaluates to true or a signal is received. The }(hj&hhhNhNubj)}(h **condition**h]h condition}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh$ is checked each time the waitqueue }(hj&hhhNhNubj)}(h**wq**h]hwq}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh is woken up.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj8&ubjM)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hj,'hhhNhNubj)}(h **condition**h]h condition}(hj4'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,'ubhO testing is done while lock is held and when this macro exits the lock is held.}(hj,'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhj8&ubjM)}(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.}(hjM'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM^hj8&ubjM)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.}(hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhj8&ubjM)}(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.}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhj8&ubjM)}(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 }(hjz'hhhNhNubj)}(h **condition**h]h condition}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz'ubh evaluated to true.}(hjz'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMihj8&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h7wait_event_interruptible_exclusive_locked_irq (C macro)/c.wait_event_interruptible_exclusive_locked_irqhNtauh1hhjPhhhNhNubh)}(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]j)}(hj'h]h-wait_event_interruptible_exclusive_locked_irq}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMrubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhj'hMrubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hMrhj'hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj'hhhj'hMrubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjPhNhNubjM)}(hA``wait_event_interruptible_exclusive_locked_irq (wq, condition)``h]jS)}(hj'h]h=wait_event_interruptible_exclusive_locked_irq (wq, condition)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMrhj(ubah}(h]h ]h"]h$]h&]uh1jhhj(hMrhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj&(h]h Parameters}(hj((hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$(ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhj (ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]jS)}(hjE(h]hwq}(hjG(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshj?(ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj^(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZ(hMshj[(ubah}(h]h ]h"]h$]h&]uh1jhj?(ubeh}(h]h ]h"]h$]h&]uh1jhjZ(hMshj<(ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj~(h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjx(ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMthj(ubah}(h]h ]h"]h$]h&]uh1jhjx(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMthj<(ubeh}(h]h ]h"]h$]h&]uh1jhj (ubjM)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhj (ubjM)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj(hhhNhNubj)}(h **condition**h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh0 evaluates to true or a signal is received. The }(hj(hhhNhNubj)}(h **condition**h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh$ is checked each time the waitqueue }(hj(hhhNhNubj)}(h**wq**h]hwq}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh is woken up.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuhj (ubjM)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hj)hhhNhNubj)}(h **condition**h]h condition}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhO testing is done while lock is held and when this macro exits the lock is held.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhj (ubjM)}(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.}(hj5)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM}hj (ubjM)}(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.}(hjD)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj (ubjM)}(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.}(hjS)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj (ubjM)}(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 }(hjb)hhhNhNubj)}(h **condition**h]h condition}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb)ubh evaluated to true.}(hjb)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj (ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_killable (C macro)c.wait_event_killablehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hwait_event_killableh]j)}(hj)h]hwait_event_killable}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj)hMubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMhj)hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj)hhhj)hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjPhNhNubjM)}(h,``wait_event_killable (wq_head, condition)``h]jS)}(hj)h]h(wait_event_killable (wq_head, condition)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhhj*hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hj-*h]hwq_head}(hj/*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'*ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjF*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB*hMhjC*ubah}(h]h ]h"]h$]h&]uh1jhj'*ubeh}(h]h ]h"]h$]h&]uh1jhjB*hMhj$*ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjf*h]h condition}(hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjd*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj`*ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{*hMhj|*ubah}(h]h ]h"]h$]h&]uh1jhj`*ubeh}(h]h ]h"]h$]h&]uh1jhj{*hMhj$*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubjM)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*ubjM)}(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 }(hj*hhhNhNubj)}(h **condition**h]h condition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh0 evaluates to true or a signal is received. The }(hj*hhhNhNubj)}(h **condition**h]h condition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh$ is checked each time the waitqueue }(hj*hhhNhNubj)}(h **wq_head**h]hwq_head}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh is woken up.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*ubjM)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj +hhhNhNubj)}(h **condition**h]h condition}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj +ubh evaluated to true.}(hj +hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_state (C macro)c.wait_event_statehNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hwait_event_stateh]j)}(hjF+h]hwait_event_state}(hjP+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjH+hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjD+hhhjc+hMubah}(h]j?+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjc+hMhjA+hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjA+hhhjc+hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj|+jHj|+jIjJjKuh1hhhhjPhNhNubjM)}(h0``wait_event_state (wq_head, condition, state)``h]jS)}(hj+h]h,wait_event_state (wq_head, condition, state)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jhhj+hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hj+h]hwq_head}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+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]jS)}(hj,h]h condition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj ,ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj(,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$,hMhj%,ubah}(h]h ]h"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]uh1jhj$,hMhj+ubj)}(h``state`` state to sleep in h](j)}(h ``state``h]jS)}(hjH,h]hstate}(hjJ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjF,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjB,ubj)}(hhh]jM)}(hstate to sleep inh]hstate to sleep in}(hja,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj],hMhj^,ubah}(h]h ]h"]h$]h&]uh1jhjB,ubeh}(h]h ]h"]h$]h&]uh1jhj],hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubjM)}(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 (}(hj,hhhNhNubj)}(h **state**h]hstate}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh ) until the }(hj,hhhNhNubj)}(h **condition**h]h condition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh< evaluates to true or a signal is received (when allowed by }(hj,hhhNhNubj)}(h **state**h]hstate}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh). The }(hj,hhhNhNubj)}(h **condition**h]h condition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh$ is checked each time the waitqueue }(hj,hhhNhNubj)}(h **wq_head**h]hwq_head}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh is woken up.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubjM)}(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 }(hj-hhhNhNubj)}(h **state**h]hstate}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh ) and 0 if }(hj-hhhNhNubj)}(h **condition**h]h condition}(hj+-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh evaluated to true.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%wait_event_killable_timeout (C macro)c.wait_event_killable_timeouthNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]j)}(hj^-h]hwait_event_killable_timeout}(hjh-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`-hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\-hhhj{-hMubah}(h]jW-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{-hMhjY-hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjY-hhhj{-hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjPhNhNubjM)}(h=``wait_event_killable_timeout (wq_head, condition, timeout)``h]jS)}(hj-h]h9wait_event_killable_timeout (wq_head, condition, timeout)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(h7sleep until a condition gets true or a timeout elapses h]jM)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubah}(h]h ]h"]h$]h&]uh1jhhj-hMhjPhhubj)}(hXO**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_KILLABLE) until the **condition** evaluates to true or a kill signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. Only kill signals interrupt this process. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed, or -``ERESTARTSYS`` if it was interrupted by a kill signal.h](jM)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhV/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]jS)}(hj-h]hwq_head}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.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]jS)}(hj'.h]h condition}(hj).hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj!.ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj@.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<.hMhj=.ubah}(h]h ]h"]h$]h&]uh1jhj!.ubeh}(h]h ]h"]h$]h&]uh1jhj<.hMhj-ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj`.h]htimeout}(hjb.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjZ.ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjy.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhju.hMhjv.ubah}(h]h ]h"]h$]h&]uh1jhjZ.ubeh}(h]h ]h"]h$]h&]uh1jhju.hMhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubjM)}(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 }(hj.hhhNhNubj)}(h **condition**h]h condition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh5 evaluates to true or a kill signal is received. The }(hj.hhhNhNubj)}(h **condition**h]h condition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh$ is checked each time the waitqueue }(hj.hhhNhNubj)}(h **wq_head**h]hwq_head}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh is woken up.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubjM)}(h)Only kill signals interrupt this process.h]h)Only kill signals interrupt this process.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubjM)}(h **Return**h]j)}(hj/h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubjM)}(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 }(hj,/hhhNhNubj)}(h **condition**h]h condition}(hj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh evaluated to }(hj,/hhhNhNubjS)}(h ``false``h]hfalse}(hjF/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,/ubh after the }(hj,/hhhNhNubj)}(h **timeout**h]htimeout}(hjX/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh elapsed, 1 if the }(hj,/hhhNhNubj)}(h **condition**h]h condition}(hjj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh evaluated to }hj,/sbjS)}(h``true``h]htrue}(hj|/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,/ubh after the }hj,/sbj)}(h **timeout**h]htimeout}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh4 elapsed, the remaining jiffies (at least 1) if the }(hj,/hhhNhNubj)}(h **condition**h]h condition}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh evaluated to }(hj,/hhhNhNubjS)}(h``true``h]htrue}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,/ubh before the }(hj,/hhhNhNubj)}(h **timeout**h]htimeout}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,/ubh elapsed, or -}(hj,/hhhNhNubjS)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,/ubh( if it was interrupted by a kill signal.}(hj,/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!wait_event_lock_irq_cmd (C macro)c.wait_event_lock_irq_cmdhNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]j)}(hj 0h]hwait_event_lock_irq_cmd}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj 0hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj&0hMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&0hMhj0hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj0hhhj&0hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj?0jHj?0jIjJjKuh1hhhhjPhNhNubjM)}(h;``wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)``h]jS)}(hjE0h]h7wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)}(hjG0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC0ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjPhhubji)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]jM)}(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_0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj[0ubah}(h]h ]h"]h$]h&]uh1jhhjm0hMhjPhhubj)}(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](jM)}(h**Parameters**h]j)}(hjz0h]h Parameters}(hj|0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx0ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjt0ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj0h]hwq_head}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj0ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj0h]h condition}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj0ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hj 1h]hlock}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj1ubj)}(hhh]jM)}(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.}(hj$1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj!1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj 1hMhj0ubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]jS)}(hjE1h]hcmd}(hjG1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj?1ubj)}(hhh]jM)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hj^1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj[1ubah}(h]h ]h"]h$]h&]uh1jhj?1ubeh}(h]h ]h"]h$]h&]uh1jhjZ1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhjt0ubjM)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjt0ubjM)}(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 }(hj1hhhNhNubj)}(h **condition**h]h condition}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh evaluates to true. The }(hj1hhhNhNubj)}(h **condition**h]h condition}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh$ is checked each time the waitqueue }(hj1hhhNhNubj)}(h **wq_head**h]hwq_head}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh is woken up.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjt0ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjt0ubjM)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM"hjt0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_lock_irq (C macro)c.wait_event_lock_irqhNtauh1hhjPhhhNhNubh)}(hhh](h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]j)}(hj2h]hwait_event_lock_irq}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj12hM/ubah}(h]j 2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj12hM/hj2hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj2hhhj12hM/ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjJ2jHjJ2jIjJjKuh1hhhhjPhNhNubjM)}(h2``wait_event_lock_irq (wq_head, condition, lock)``h]jS)}(hjP2h]h.wait_event_lock_irq (wq_head, condition, lock)}(hjR2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN2ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM1hjPhhubji)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]jM)}(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.}(hjj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/hjf2ubah}(h]h ]h"]h$]h&]uh1jhhjx2hM/hjPhhubj)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.h](jM)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hj2ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj2h]hwq_head}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hj2ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hM3hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM3hj2ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj2h]h condition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM4hj2ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hM4hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM4hj2ubj)}(hb``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hj3h]hlock}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hj3ubj)}(hhh]jM)}(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.}(hj/3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM5hj,3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj+3hM6hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hjR3h]h Description}(hjT3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP3ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hj2ubjM)}(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 }(hjh3hhhNhNubj)}(h **condition**h]h condition}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh3ubh evaluates to true. The }(hjh3hhhNhNubj)}(h **condition**h]h condition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh3ubh$ is checked each time the waitqueue }(hjh3hhhNhNubj)}(h **wq_head**h]hwq_head}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh3ubh is woken up.}(hjh3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM7hj2ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hj2ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/wait_event_interruptible_lock_irq_cmd (C macro)'c.wait_event_interruptible_lock_irq_cmdhNtauh1hhjPhhhNhNubh)}(hhh](h)}(h%wait_event_interruptible_lock_irq_cmdh]h)}(h%wait_event_interruptible_lock_irq_cmdh]h)}(h%wait_event_interruptible_lock_irq_cmdh]j)}(hj3h]h%wait_event_interruptible_lock_irq_cmd}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj4hMRubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hMRhj3hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj3hhhj4hMRubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjPhNhNubjM)}(hI``wait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)``h]jS)}(hj!4h]hEwait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)}(hj#4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThjPhhubji)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]jM)}(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;4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj74ubah}(h]h ]h"]h$]h&]uh1jhhjI4hMRhjPhhubj)}(hXu**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. ``cmd`` a command which is invoked outside the critical section before sleep **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards. The macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](jM)}(h**Parameters**h]j)}(hjV4h]h Parameters}(hjX4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT4ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhjP4ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hju4h]hwq_head}(hjw4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjs4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjo4ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMUhj4ubah}(h]h ]h"]h$]h&]uh1jhjo4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMUhjl4ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj4h]h condition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj4ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMVhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMVhjl4ubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hj4h]hlock}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhj4ubj)}(hhh]jM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMXhjl4ubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]jS)}(hj!5h]hcmd}(hj#5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhj5ubj)}(hhh]jM)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hj:5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj75ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj65hMZhjl4ubeh}(h]h ]h"]h$]h&]uh1jhjP4ubjM)}(h**Description**h]j)}(hj]5h]h Description}(hj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[5ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM\hjP4ubjM)}(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 }(hjs5hhhNhNubj)}(h **condition**h]h condition}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs5ubh0 evaluates to true or a signal is received. The }(hjs5hhhNhNubj)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs5ubh$ is checked each time the waitqueue }(hjs5hhhNhNubj)}(h **wq_head**h]hwq_head}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs5ubh is woken up.}(hjs5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hjP4ubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM_hjP4ubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhjP4ubjM)}(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 }(hj5hhhNhNubj)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh evaluated to true.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhjP4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+wait_event_interruptible_lock_irq (C macro)#c.wait_event_interruptible_lock_irqhNtauh1hhjPhhhNhNubh)}(hhh](h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]j)}(hj6h]h!wait_event_interruptible_lock_irq}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMtubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj.6hMtubah}(h]j 6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.6hMthj 6hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj 6hhhj.6hMtubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjG6jHjG6jIjJjKuh1hhhhjPhNhNubjM)}(h@``wait_event_interruptible_lock_irq (wq_head, condition, lock)``h]jS)}(hjM6h]hhjm:ubjQ)}(h h]h }(hj~:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjm:ubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsjW:sb c.__wake_upasbuh1hhjm:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjm:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm:ubj)}(hwq_headh]hwq_head}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hji:ubj:)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjQ)}(h h]h }(hj ;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hmodeh]hmode}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hji:ubj:)}(hint nr_exclusiveh](j)}(hinth]hint}(hj4;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0;ubjQ)}(h h]h }(hjB;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0;ubj)}(h nr_exclusiveh]h nr_exclusive}(hjP;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hji:ubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hji;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje;ubjQ)}(h h]h }(hjw;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhje;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje;ubj)}(hkeyh]hkey}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hji:ubeh}(h]h ]h"]h$]h&]jjuh1j3hj0:hhhjB:hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,:hhhjB:hKubah}(h]j':ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjB:hKhj):hhubj4)}(hhh]jM)}(h'wake up threads blocked on a waitqueue.h]h'wake up threads blocked on a waitqueue.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;hhubah}(h]h ]h"]h$]h&]uh1j3hj):hhhjB:hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjPhNhNubj)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue ``unsigned int mode`` which threads ``int nr_exclusive`` how many wake-one or wake-many threads to wake up ``void *key`` is directly passed to the wakeup function **Description** If this function wakes up a task, it executes a full memory barrier before accessing the task state. Returns the number of exclusive tasks that were awaken.h](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;ubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj;h]hstruct wait_queue_head *wq_head}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;ubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhj;ubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hj6<h]hunsigned int mode}(hj8<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj0<ubj)}(hhh]jM)}(h which threadsh]h which threads}(hjO<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjK<hKhjL<ubah}(h]h ]h"]h$]h&]uh1jhj0<ubeh}(h]h ]h"]h$]h&]uh1jhjK<hKhj;ubj)}(hG``int nr_exclusive`` how many wake-one or wake-many threads to wake up h](j)}(h``int nr_exclusive``h]jS)}(hjo<h]hint nr_exclusive}(hjq<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhji<ubj)}(hhh]jM)}(h1how many wake-one or wake-many threads to wake uph]h1how many wake-one or wake-many threads to wake up}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hKhj<ubah}(h]h ]h"]h$]h&]uh1jhji<ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhj;ubj)}(h8``void *key`` is directly passed to the wakeup function h](j)}(h ``void *key``h]jS)}(hj<h]h void *key}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj<ubj)}(hhh]jM)}(h)is directly passed to the wakeup functionh]h)is directly passed to the wakeup function}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubjM)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;ubjM)}(hIf this function wakes up a task, it executes a full memory barrier before accessing the task state. Returns the number of exclusive tasks that were awaken.h]hIf this function wakes up a task, it executes a full memory barrier before accessing the task state. Returns the number of exclusive tasks that were awaken.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__wake_up_sync_key (C function)c.__wake_up_sync_keyhNtauh1hhjPhhhNhNubh)}(hhh](h)}(hWvoid __wake_up_sync_key (struct wait_queue_head *wq_head, unsigned int mode, void *key)h]h)}(hVvoid __wake_up_sync_key(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j)}(hvoidh]hvoid}(hj(=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$=hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubjQ)}(h h]h }(hj7=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$=hhhj6=hKubh)}(h__wake_up_sync_keyh]j)}(h__wake_up_sync_keyh]h__wake_up_sync_key}(hjI=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$=hhhj6=hKubj4)}(h?(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hje=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hja=ubjQ)}(h h]h }(hjr=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhja=ubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjK=sbc.__wake_up_sync_keyasbuh1hhja=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhja=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja=ubj)}(hwq_headh]hwq_head}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]=ubj:)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hmodeh]hmode}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]=ubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hj(>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$>ubjQ)}(h h]h }(hj6>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$>ubj)}(hjh]h*}(hjD>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$>ubj)}(hkeyh]hkey}(hjQ>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]=ubeh}(h]h ]h"]h$]h&]jjuh1j3hj$=hhhj6=hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj =hhhj6=hKubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6=hKhj=hhubj4)}(hhh]jM)}(h'wake up threads blocked on a waitqueue.h]h'wake up threads blocked on a waitqueue.}(hj{>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjx>hhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhj6=hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjPhNhNubj)}(hXT**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue ``unsigned int mode`` which threads ``void *key`` opaque value to be passed to wakeup targets **Description** The sync wakeup differs that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs. On UP it can prevent extra preemption. If this function wakes up a task, it executes a full memory barrier before accessing the task state.h](jM)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj>h]hstruct wait_queue_head *wq_head}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhj>ubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hj>h]hunsigned int mode}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubj)}(hhh]jM)}(h which threadsh]h which threads}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj ?hKhj ?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj ?hKhj>ubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]jS)}(hj.?h]h void *key}(hj0?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,?ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj(?ubj)}(hhh]jM)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjG?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjC?hKhjD?ubah}(h]h ]h"]h$]h&]uh1jhj(?ubeh}(h]h ]h"]h$]h&]uh1jhjC?hKhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubjM)}(h**Description**h]j)}(hji?h]h Description}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg?ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubjM)}(hX The sync wakeup differs that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs.h]hXThe sync wakeup differs that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are ‘synchronized’ with each other. This can prevent needless bouncing between CPUs.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubjM)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubjM)}(hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.h]hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&__wake_up_locked_sync_key (C function)c.__wake_up_locked_sync_keyhNtauh1hhjPhhhNhNubh)}(hhh](h)}(h^void __wake_up_locked_sync_key (struct wait_queue_head *wq_head, unsigned int mode, void *key)h]h)}(h]void __wake_up_locked_sync_key(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hKubh)}(h__wake_up_locked_sync_keyh]j)}(h__wake_up_locked_sync_keyh]h__wake_up_locked_sync_key}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhj?hKubj4)}(h?(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hj @hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj'@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)@modnameN classnameNjwjz)}j}]j)}jsj?sbc.__wake_up_locked_sync_keyasbuh1hhj@ubjQ)}(h h]h }(hjG@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjU@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hwq_headh]hwq_head}(hjb@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hj{@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw@ubj)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw@ubj)}(hmodeh]hmode}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hkeyh]hkey}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hj?hhhj?hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhj?hKubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hKhj?hhubj4)}(hhh]jM)}(h/wake up a thread blocked on a locked waitqueue.h]h/wake up a thread blocked on a locked waitqueue.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjAhhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhj?hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7AjHj7AjIjJjKuh1hhhhjPhNhNubj)}(hXW**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue ``unsigned int mode`` which threads ``void *key`` opaque value to be passed to wakeup targets **Description** The sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs. On UP it can prevent extra preemption. If this function wakes up a task, it executes a full memory barrier before accessing the task state.h](jM)}(h**Parameters**h]j)}(hjAAh]h Parameters}(hjCAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Aubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;Aubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj`Ah]hstruct wait_queue_head *wq_head}(hjbAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^Aubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZAubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hjyAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuAhKhjvAubah}(h]h ]h"]h$]h&]uh1jhjZAubeh}(h]h ]h"]h$]h&]uh1jhjuAhKhjWAubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hjAh]hunsigned int mode}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjAubj)}(hhh]jM)}(h which threadsh]h which threads}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhKhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhKhjWAubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]jS)}(hjAh]h void *key}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjAubj)}(hhh]jM)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhKhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhKhjWAubeh}(h]h ]h"]h$]h&]uh1jhj;AubjM)}(h**Description**h]j)}(hj Bh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;AubjM)}(hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs.h]hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are ‘synchronized’ with each other. This can prevent needless bouncing between CPUs.}(hj#BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;AubjM)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hj2BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;AubjM)}(hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.h]hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.}(hjABhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj;Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfinish_wait (C function) c.finish_waithNtauh1hhjPhhhNhNubh)}(hhh](h)}(hUvoid finish_wait (struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h]h)}(hTvoid finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h](j)}(hvoidh]hvoid}(hjpBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlBhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMoubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlBhhhj~BhMoubh)}(h finish_waith]j)}(h finish_waith]h finish_wait}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlBhhhj~BhMoubj4)}(hD(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h](j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hjBhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsjBsb c.finish_waitasbuh1hhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hwq_headh]hwq_head}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h!struct wait_queue_entry *wq_entryh](j?)}(hjBh]hstruct}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjCubjQ)}(h h]h }(hj,ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubh)}(hhh]j)}(hwait_queue_entryh]hwait_queue_entry}(hj=ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Cubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?CmodnameN classnameNjwjz)}j}]jB c.finish_waitasbuh1hhjCubjQ)}(h h]h }(hj[ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjiChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hwq_entryh]hwq_entry}(hjvChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hjlBhhhj~BhMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhBhhhj~BhMoubah}(h]jcBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~BhMohjeBhhubj4)}(hhh]jM)}(h!clean up after waiting in a queueh]h!clean up after waiting in a queue}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMohjChhubah}(h]h ]h"]h$]h&]uh1j3hjeBhhhj~BhMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjPhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMshjCubj)}(hhh](j)}(h8``struct wait_queue_head *wq_head`` waitqueue waited on h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hjCh]hstruct wait_queue_head *wq_head}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMphjCubj)}(hhh]jM)}(hwaitqueue waited onh]hwaitqueue waited on}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMphjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMphjCubj)}(h6``struct wait_queue_entry *wq_entry`` wait descriptor h](j)}(h%``struct wait_queue_entry *wq_entry``h]jS)}(hjDh]h!struct wait_queue_entry *wq_entry}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMqhjDubj)}(hhh]jM)}(hwait descriptorh]hwait descriptor}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/DhMqhj0Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj/DhMqhjCubeh}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hjUDh]h Description}(hjWDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSDubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMshjCubjM)}(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.}(hjkDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMrhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjPhhhNhNubeh}(h]wait-queues-and-wake-eventsah ]h"]wait queues and wake eventsah$]h&]uh1hhhhhhhhK=ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhhhhhKFubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_task_stopped (C function)c.wait_task_stoppedhNtauh1hhjDhhhNhNubh)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMBubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjDhMBubh)}(hwait_task_stoppedh]j)}(hwait_task_stoppedh]hwait_task_stopped}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjDhMBubj4)}(h9(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j:)}(hstruct wait_opts *woh](j?)}(hjBh]hstruct}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubh)}(hhh]j)}(h wait_optsh]h wait_opts}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsjDsbc.wait_task_stoppedasbuh1hhjDubjQ)}(h h]h }(hj.EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubh)}(hhh]j)}(h task_structh]h task_struct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j*Ec.wait_task_stoppedasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hp}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjDhMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjDhMBubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMBhjDhhubj4)}(hhh]jM)}(h,Wait for ``TASK_STOPPED`` or ``TASK_TRACED``h](h Wait for }(hjFhhhNhNubjS)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubh or }(hjFhhhNhNubjS)}(h``TASK_TRACED``h]h TASK_TRACED}(hj1FhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMBhjFhhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhjDhMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOFjHjOFjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjYFh]h Parameters}(hj[FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWFubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMFhjSFubj)}(hhh](j)}(h&``struct wait_opts *wo`` wait options h](j)}(h``struct wait_opts *wo``h]jS)}(hjxFh]hstruct wait_opts *wo}(hjzFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvFubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMChjrFubj)}(hhh]jM)}(h wait optionsh]h wait options}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMChjFubah}(h]h ]h"]h$]h&]uh1jhjrFubeh}(h]h ]h"]h$]h&]uh1jhjFhMChjoFubj)}(h&``int ptrace`` is the wait for ptrace h](j)}(h``int ptrace``h]jS)}(hjFh]h int ptrace}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMDhjFubj)}(hhh]jM)}(his the wait for ptraceh]his the wait for ptrace}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMDhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMDhjoFubj)}(h+``struct task_struct *p`` task to wait for h](j)}(h``struct task_struct *p``h]jS)}(hjFh]hstruct task_struct *p}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMEhjFubj)}(hhh]jM)}(htask to wait forh]htask to wait for}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMEhjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMEhjoFubeh}(h]h ]h"]h$]h&]uh1jhjSFubjM)}(h**Description**h]j)}(hj%Gh]h Description}(hj'GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Gubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMGhjSFubjM)}(hOHandle sys_wait4() work for ``p`` in state ``TASK_STOPPED`` or ``TASK_TRACED``.h](hHandle sys_wait4() work for }(hj;GhhhNhNubjS)}(h``p``h]hp}(hjCGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;Gubh in state }(hj;GhhhNhNubjS)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hjUGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;Gubh or }(hj;GhhhNhNubjS)}(h``TASK_TRACED``h]h TASK_TRACED}(hjgGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;Gubh.}(hj;GhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMFhjSFubjM)}(h **Context**h]j)}(hjGh]hContext}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMHhjSFubjM)}(hread_lock(:c:type:`tasklist_lock`), which is released if return value is non-zero. Also, grabs and releases **p->sighand->siglock**.h](h read_lock(}(hjGhhhNhNubh)}(h:c:type:`tasklist_lock`h]jS)}(hjGh]h tasklist_lock}(hjGhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB tasklist_lockuh1hhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMIhjGubhL), which is released if return value is non-zero. Also, grabs and releases }(hjGhhhNhNubj)}(h**p->sighand->siglock**h]hp->sighand->siglock}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjGhMIhjSFubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMLhjSFubjM)}(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 }(hjGhhhNhNubj)}(h**p**h]hp}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubhg’s pid on success, implies that tasklist_lock is released and wait condition search should terminate.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMMhjSFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$task_set_jobctl_pending (C function)c.task_set_jobctl_pendinghNtauh1hhjDhhhNhNubh)}(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}(hj5HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1HhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjCHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1HhhhjBHhMubh)}(htask_set_jobctl_pendingh]j)}(htask_set_jobctl_pendingh]htask_set_jobctl_pending}(hjUHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1HhhhjBHhMubj4)}(h.(struct task_struct *task, unsigned long mask)h](j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjqHhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjmHubjQ)}(h h]h }(hj~HhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmHubh)}(hhh]j)}(h task_structh]h task_struct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsjWHsbc.task_set_jobctl_pendingasbuh1hhjmHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmHubj)}(htaskh]htask}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiHubj:)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hlongh]hlong}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjQ)}(h h]h }(hj IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hmaskh]hmask}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiHubeh}(h]h ]h"]h$]h&]jjuh1j3hj1HhhhjBHhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-HhhhjBHhMubah}(h]j(Hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBHhMhj*Hhhubj4)}(hhh]jM)}(hset jobctl pending bitsh]hset jobctl pending bits}(hjEIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjBIhhubah}(h]h ]h"]h$]h&]uh1j3hj*HhhhjBHhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]IjHj]IjIjJjKuh1hhhhjDhNhNubj)}(hXH**Parameters** ``struct task_struct *task`` target task ``unsigned long mask`` pending bits to set **Description** Clear **mask** from **task->jobctl**. **mask** must be subset of ``JOBCTL_PENDING_MASK`` | ``JOBCTL_STOP_CONSUME`` | ``JOBCTL_STOP_SIGMASK`` | ``JOBCTL_TRAPPING``. If stop signo is being set, the existing signo is cleared. If **task** is already being killed or exiting, this function becomes noop. **Context** Must be called with **task->sighand->siglock** held. **Return** ``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](jM)}(h**Parameters**h]j)}(hjgIh]h Parameters}(hjiIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeIubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjaIubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjIh]hstruct task_struct *task}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjIubj)}(hhh]jM)}(h target taskh]h target task}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hj}Iubj)}(h+``unsigned long mask`` pending bits to set h](j)}(h``unsigned long mask``h]jS)}(hjIh]hunsigned long mask}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjIubj)}(hhh]jM)}(hpending bits to seth]hpending bits to set}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hj}Iubeh}(h]h ]h"]h$]h&]uh1jhjaIubjM)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjaIubjM)}(hX-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.h](hClear }(hjJhhhNhNubj)}(h**mask**h]hmask}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh from }(hjJhhhNhNubj)}(h**task->jobctl**h]h task->jobctl}(hj*JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh. }(hjJhhhNhNubj)}(h**mask**h]hmask}(hjsighand->siglock** held.h](hMust be called with }(hjJhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh held.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjaIubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjaIubjM)}(hO``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](jS)}(h``true``h]htrue}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubh if }(hjKhhhNhNubj)}(h**mask**h]hmask}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh is set, }(hjKhhhNhNubjS)}(h ``false``h]hfalse}(hj(KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubh if made noop because }(hjKhhhNhNubj)}(h**task**h]htask}(hj:KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh was dying.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjaIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'task_clear_jobctl_trapping (C function)c.task_clear_jobctl_trappinghNtauh1hhjDhhhNhNubh)}(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}(hjsKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoKhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoKhhhjKhM)ubh)}(htask_clear_jobctl_trappingh]j)}(htask_clear_jobctl_trappingh]htask_clear_jobctl_trapping}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjoKhhhjKhM)ubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjKhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjKubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubh)}(hhh]j)}(h task_structh]h task_struct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsjKsbc.task_clear_jobctl_trappingasbuh1hhjKubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(htaskh]htask}(hj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubah}(h]h ]h"]h$]h&]jjuh1j3hjoKhhhjKhM)ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkKhhhjKhM)ubah}(h]jfKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhM)hjhKhhubj4)}(hhh]jM)}(hclear jobctl trapping bith]hclear jobctl trapping bit}(hj3LhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)hj0Lhhubah}(h]h ]h"]h$]h&]uh1j3hjhKhhhjKhM)ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKLjHjKLjIjJjKuh1hhhhjDhNhNubj)}(hXr**Parameters** ``struct task_struct *task`` target task **Description** If JOBCTL_TRAPPING is set, a ptracer is waiting for us to enter TRACED. Clear it and wake up the ptracer. Note that we don't need any further locking. **task->siglock** guarantees that **task->parent** points to the ptracer. **Context** Must be called with **task->sighand->siglock** held.h](jM)}(h**Parameters**h]j)}(hjULh]h Parameters}(hjWLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSLubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-hjOLubj)}(hhh]j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjtLh]hstruct task_struct *task}(hjvLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrLubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM*hjnLubj)}(hhh]jM)}(h target taskh]h target task}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhM*hjLubah}(h]h ]h"]h$]h&]uh1jhjnLubeh}(h]h ]h"]h$]h&]uh1jhjLhM*hjkLubah}(h]h ]h"]h$]h&]uh1jhjOLubjM)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM,hjOLubjM)}(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. }(hjLhhhNhNubj)}(h**task->siglock**h]h task->siglock}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh guarantees that }(hjLhhhNhNubj)}(h**task->parent**h]h task->parent}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh points to the ptracer.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM+hjOLubjM)}(h **Context**h]j)}(hjLh]hContext}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM0hjOLubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjMhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh held.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjOLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&task_clear_jobctl_pending (C function)c.task_clear_jobctl_pendinghNtauh1hhjDhhhNhNubh)}(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}(hjQMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMMhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>ubjQ)}(h h]h }(hj`MhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMMhhhj_MhM>ubh)}(htask_clear_jobctl_pendingh]j)}(htask_clear_jobctl_pendingh]htask_clear_jobctl_pending}(hjrMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnMubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMMhhhj_MhM>ubj4)}(h.(struct task_struct *task, unsigned long mask)h](j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjMhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh)}(hhh]j)}(h task_structh]h task_struct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMmodnameN classnameNjwjz)}j}]j)}jsjtMsbc.task_clear_jobctl_pendingasbuh1hhjMubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(htaskh]htask}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjQ)}(h h]h }(hj*NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hmaskh]hmask}(hj8NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubeh}(h]h ]h"]h$]h&]jjuh1j3hjMMhhhj_MhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIMhhhj_MhM>ubah}(h]jDMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_MhM>hjFMhhubj4)}(hhh]jM)}(hclear jobctl pending bitsh]hclear jobctl pending bits}(hjbNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>hj_Nhhubah}(h]h ]h"]h$]h&]uh1j3hjFMhhhj_MhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzNjHjzNjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhj~Nubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjNh]hstruct task_struct *task}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjNubj)}(hhh]jM)}(h target taskh]h target task}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM?hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM?hjNubj)}(h-``unsigned long mask`` pending bits to clear h](j)}(h``unsigned long mask``h]jS)}(hjNh]hunsigned long mask}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hjNubj)}(hhh]jM)}(hpending bits to clearh]hpending bits to clear}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM@hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM@hjNubeh}(h]h ]h"]h$]h&]uh1jhj~NubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhj~NubjM)}(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 }(hj-OhhhNhNubj)}(h**mask**h]hmask}(hj5OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Oubh from }(hj-OhhhNhNubj)}(h**task->jobctl**h]h task->jobctl}(hjGOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Oubh. }(hj-OhhhNhNubj)}(h**mask**h]hmask}(hjYOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Oubh must be subset of }(hj-OhhhNhNubjS)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hjkOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-Oubh. If }(hj-OhhhNhNubjS)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hj}OhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-Oubh8 is being cleared, other STOP bits are cleared together.}(hj-OhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMAhj~NubjM)}(hiIf clearing of **mask** leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().h](hIf clearing of }(hjOhhhNhNubj)}(h**mask**h]hmask}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubhR leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhj~NubjM)}(h **Context**h]j)}(hjOh]hContext}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhj~NubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjOhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh held.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMIhj~Nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(task_participate_group_stop (C function)c.task_participate_group_stophNtauh1hhjDhhhNhNubh)}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj PhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj PhhhjPhMZubh)}(htask_participate_group_stoph]j)}(htask_participate_group_stoph]htask_participate_group_stop}(hj0PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Pubah}(h]h ](jjeh"]h$]h&]jjuh1hhj PhhhjPhMZubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjLPhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjHPubjQ)}(h h]h }(hjYPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHPubh)}(hhh]j)}(h task_structh]h task_struct}(hjjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlPmodnameN classnameNjwjz)}j}]j)}jsj2Psbc.task_participate_group_stopasbuh1hhjHPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHPubj)}(htaskh]htask}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubah}(h]h ]h"]h$]h&]jjuh1j3hj PhhhjPhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMZubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMZhjPhhubj4)}(hhh]jM)}(hparticipate in a group stoph]hparticipate in a group stop}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^hjPubj)}(hhh]j)}(h@``struct task_struct *task`` task participating in a group stop h](j)}(h``struct task_struct *task``h]jS)}(hjQh]hstruct task_struct *task}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[hj Qubj)}(hhh]jM)}(h"task participating in a group stoph]h"task participating in a group stop}(hj)QhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%QhM[hj&Qubah}(h]h ]h"]h$]h&]uh1jhj Qubeh}(h]h ]h"]h$]h&]uh1jhj%QhM[hjQubah}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hjKQh]h Description}(hjMQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIQubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM]hjPubjM)}(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](j)}(h**task**h]htask}(hjeQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaQubh has }(hjaQhhhNhNubjS)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hjwQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaQubhq set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if }(hjaQhhhNhNubjS)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaQubhH was set. If the consumption completes the group stop, the appropriate }(hjaQhhhNhNubhtitle_reference)}(h `SIGNAL_*`h]hSIGNAL_*}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjaQubh flags are set.}(hjaQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM\hjPubjM)}(h **Context**h]j)}(hjQh]hContext}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMahjPubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjQhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh held.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMbhjPubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMdhjPubjM)}(hX``true`` if group stop completion should be notified to the parent, ``false`` otherwise.h](jS)}(h``true``h]htrue}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubh< if group stop completion should be notified to the parent, }(hjRhhhNhNubjS)}(h ``false``h]hfalse}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubh otherwise.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMehjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hptrace_trap_notify (C function)c.ptrace_trap_notifyhNtauh1hhjDhhhNhNubh)}(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}(hjVRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRRhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDubjQ)}(h h]h }(hjeRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRRhhhjdRhMDubh)}(hptrace_trap_notifyh]j)}(hptrace_trap_notifyh]hptrace_trap_notify}(hjwRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsRubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRRhhhjdRhMDubj4)}(h(struct task_struct *t)h]j:)}(hstruct task_struct *th](j?)}(hjBh]hstruct}(hjRhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubh)}(hhh]j)}(h task_structh]h task_struct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsjyRsbc.ptrace_trap_notifyasbuh1hhjRubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hth]ht}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubah}(h]h ]h"]h$]h&]jjuh1j3hjRRhhhjdRhMDubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNRhhhjdRhMDubah}(h]jIRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdRhMDhjKRhhubj4)}(hhh]jM)}(hschedule trap to notify ptracerh]hschedule trap to notify ptracer}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDhjShhubah}(h]h ]h"]h$]h&]uh1j3hjKRhhhjdRhMDubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.SjHj.SjIjJjKuh1hhhhjDhNhNubj)}(hXn**Parameters** ``struct task_struct *t`` tracee wanting to notify tracer **Description** This function schedules sticky ptrace trap which is cleared on the next TRAP_STOP to notify ptracer of an event. **t** must have been seized by ptracer. If **t** is running, STOP trap will be taken. If trapped for STOP and ptracer is listening for events, tracee is woken up so that it can re-trap for the new event. If trapped otherwise, STOP trap will be eventually taken without returning to userland after the existing traps are finished by PTRACE_CONT. **Context** Must be called with **task->sighand->siglock** held.h](jM)}(h**Parameters**h]j)}(hj8Sh]h Parameters}(hj:ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Subah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhj2Subj)}(hhh]j)}(h:``struct task_struct *t`` tracee wanting to notify tracer h](j)}(h``struct task_struct *t``h]jS)}(hjWSh]hstruct task_struct *t}(hjYShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUSubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhjQSubj)}(hhh]jM)}(htracee wanting to notify tracerh]htracee wanting to notify tracer}(hjpShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlShMEhjmSubah}(h]h ]h"]h$]h&]uh1jhjQSubeh}(h]h ]h"]h$]h&]uh1jhjlShMEhjNSubah}(h]h ]h"]h$]h&]uh1jhj2SubjM)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMGhj2SubjM)}(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. }(hjShhhNhNubj)}(h**t**h]ht}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh" must have been seized by ptracer.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMFhj2SubjM)}(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 }(hjShhhNhNubj)}(h**t**h]ht}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhX* 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.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMJhj2SubjM)}(h **Context**h]j)}(hjSh]hContext}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMPhj2SubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjThhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh held.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMQhj2Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hforce_sig_seccomp (C function)c.force_sig_seccomphNtauh1hhjDhhhNhNubh)}(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}(hjCThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ThhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjRThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ThhhjQThMubh)}(hforce_sig_seccomph]j)}(hforce_sig_seccomph]hforce_sig_seccomp}(hjdThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Tubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?ThhhjQThMubj4)}(h.(int syscall, int reason, bool force_coredump)h](j:)}(h int syscallh](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|TubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|Tubj)}(hsyscallh]hsyscall}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Tubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxTubj:)}(h int reasonh](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hreasonh]hreason}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxTubj:)}(hbool force_coredumph](j)}(hjh]hbool}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hforce_coredumph]hforce_coredump}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxTubeh}(h]h ]h"]h$]h&]jjuh1j3hj?ThhhjQThMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;ThhhjQThMubah}(h]j6Tah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQThMhj8Thhubj4)}(hhh]jM)}(h6signals the task to allow in-process syscall emulationh]h6signals the task to allow in-process syscall emulation}(hj/UhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj,Uhhubah}(h]h ]h"]h$]h&]uh1j3hj8ThhhjQThMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGUjHjGUjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjQUh]h Parameters}(hjSUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOUubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjKUubj)}(hhh](j)}(h3``int syscall`` syscall number to send to userland h](j)}(h``int syscall``h]jS)}(hjpUh]h int syscall}(hjrUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnUubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjjUubj)}(hhh]jM)}(h"syscall number to send to userlandh]h"syscall number to send to userland}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjgUubj)}(hN``int reason`` filter-supplied reason code to send to userland (via si_errno) h](j)}(h``int reason``h]jS)}(hjUh]h int reason}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjUubj)}(hhh]jM)}(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)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjgUubj)}(h3``bool force_coredump`` true to trigger a coredump h](j)}(h``bool force_coredump``h]jS)}(hjUh]hbool force_coredump}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjUubj)}(hhh]jM)}(htrue to trigger a coredumph]htrue to trigger a coredump}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjgUubeh}(h]h ]h"]h$]h&]uh1jhjKUubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjKUubjM)}(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.}(hj3VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjKUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%do_notify_parent_cldstop (C function)c.do_notify_parent_cldstophNtauh1hhjDhhhNhNubh)}(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}(hjbVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^VhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjqVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^VhhhjpVhMubh)}(hdo_notify_parent_cldstoph]j)}(hdo_notify_parent_cldstoph]hdo_notify_parent_cldstop}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^VhhhjpVhMubj4)}(h4(struct task_struct *tsk, bool for_ptracer, int why)h](j:)}(hstruct task_struct *tskh](j?)}(hjBh]hstruct}(hjVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjVubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubh)}(hhh]j)}(h task_structh]h task_struct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVmodnameN classnameNjwjz)}j}]j)}jsjVsbc.do_notify_parent_cldstopasbuh1hhjVubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(htskh]htsk}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(hbool for_ptracerh](j)}(hjh]hbool}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj WubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Wubj)}(h for_ptracerh]h for_ptracer}(hj,WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Wubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(hint whyh](j)}(hinth]hint}(hjEWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubjQ)}(h h]h }(hjSWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAWubj)}(hwhyh]hwhy}(hjaWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubeh}(h]h ]h"]h$]h&]jjuh1j3hj^VhhhjpVhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZVhhhjpVhMubah}(h]jUVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjpVhMhjWVhhubj4)}(hhh]jM)}(h/notify parent of stopped/continued state changeh]h/notify parent of stopped/continued state change}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWhhubah}(h]h ]h"]h$]h&]uh1j3hjWVhhhjpVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubj)}(hhh](j)}(h<``struct task_struct *tsk`` task reporting the state change h](j)}(h``struct task_struct *tsk``h]jS)}(hjWh]hstruct task_struct *tsk}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubj)}(hhh]jM)}(htask reporting the state changeh]htask reporting the state change}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjWubj)}(h5``bool for_ptracer`` the notification is for ptracer h](j)}(h``bool for_ptracer``h]jS)}(hjXh]hbool for_ptracer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubj)}(hhh]jM)}(hthe notification is for ptracerh]hthe notification is for ptracer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjWubj)}(h6``int why`` CLD_{CONTINUED|STOPPED|TRAPPED} to report h](j)}(h ``int why``h]jS)}(hj>Xh]hint why}(hj@XhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjparent** which should be the ptracer.h](hNotify }(hjXhhhNhNubj)}(h**tsk**h]htsk}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh>’s parent that the stopped/continued state has changed. If }(hjXhhhNhNubj)}(h**for_ptracer**h]h for_ptracer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh is }(hjXhhhNhNubjS)}(h ``false``h]hfalse}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubh, }(hjXhhhNhNubj)}(h**tsk**h]htsk}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh2’s group leader notifies to its real parent. If }(hjXhhhNhNubjS)}(h``true``h]htrue}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubh, }hjXsbj)}(h**tsk**h]htsk}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh reports to }(hjXhhhNhNubj)}(h**tsk->parent**h]h tsk->parent}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh which should be the ptracer.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubjM)}(h **Context**h]j)}(hjYh]hContext}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubjM)}(h7Must be called with tasklist_lock at least read locked.h]h7Must be called with tasklist_lock at least read locked.}(hj4YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_signal_stop (C function)c.do_signal_stophNtauh1hhjDhhhNhNubh)}(hhh](h)}(hbool do_signal_stop (int signr)h]h)}(hbool do_signal_stop(int signr)h](j)}(hjh]hbool}(hjcYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_YhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjqYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_YhhhjpYhM ubh)}(hdo_signal_stoph]j)}(hdo_signal_stoph]hdo_signal_stop}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_YhhhjpYhM ubj4)}(h (int signr)h]j:)}(h int signrh](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hsignrh]hsignr}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubah}(h]h ]h"]h$]h&]jjuh1j3hj_YhhhjpYhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[YhhhjpYhM ubah}(h]jVYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjpYhM hjXYhhubj4)}(hhh]jM)}(h4handle group stop for SIGSTOP and other stop signalsh]h4handle group stop for SIGSTOP and other stop signals}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjYhhubah}(h]h ]h"]h$]h&]uh1j3hjXYhhhjpYhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjZubj)}(hhh]j)}(h5``int signr`` signr causing group stop if initiating h](j)}(h ``int signr``h]jS)}(hj&Zh]h int signr}(hj(ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$Zubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj Zubj)}(hhh]jM)}(h&signr causing group stop if initiatingh]h&signr causing group stop if initiating}(hj?ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;ZhM hjsighand->siglock** held, which is released on ``true`` return.h](hMust be called with }(hj[hhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh held, which is released on }(hj[hhhNhNubjS)}(h``true``h]htrue}(hj![hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubh return.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjZubjM)}(h **Return**h]j)}(hj<[h]hReturn}(hj>[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:[ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjZubjM)}(hq``false`` if group stop is already cancelled or ptrace trap is scheduled. ``true`` if participated in group stop.h](jS)}(h ``false``h]hfalse}(hjV[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjR[ubhA if group stop is already cancelled or ptrace trap is scheduled. }(hjR[hhhNhNubjS)}(h``true``h]htrue}(hjh[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjR[ubh if participated in group stop.}(hjR[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_jobctl_trap (C function)c.do_jobctl_traphNtauh1hhjDhhhNhNubh)}(hhh](h)}(hvoid do_jobctl_trap (void)h]h)}(hvoid do_jobctl_trap(void)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMi ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hMi ubh)}(hdo_jobctl_traph]j)}(hdo_jobctl_traph]hdo_jobctl_trap}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhj[hMi ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubah}(h]h ]h"]h$]h&]jjuh1j3hj[hhhj[hMi ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhj[hMi ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hMi hj[hhubj4)}(hhh]jM)}(h take care of ptrace jobctl trapsh]h take care of ptrace jobctl traps}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMi hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hMi ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj \jHj \jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*\h]h Parameters}(hj,\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(\ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMm hj$\ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjI\h]hvoid}(hjK\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjG\ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjC\ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjb\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^\hKhj_\ubah}(h]h ]h"]h$]h&]uh1jhjC\ubeh}(h]h ]h"]h$]h&]uh1jhj^\hKhj@\ubah}(h]h ]h"]h$]h&]uh1jhj$\ubjM)}(h**Description**h]j)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj$\ubjM)}(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, }(hj\hhhNhNubjS)}(h ``SIGTRAP``h]hSIGTRAP}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMj hj$\ubjM)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj$\ubjM)}(h **Context**h]j)}(hj\h]hContext}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMr hj$\ubjM)}(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 }(hj\hhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhU held, which may be released and re-acquired before returning with intervening sleep.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMs hj$\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_freezer_trap (C function)c.do_freezer_traphNtauh1hhjDhhhNhNubh)}(hhh](h)}(hvoid do_freezer_trap (void)h]h)}(hvoid do_freezer_trap(void)h](j)}(hvoidh]hvoid}(hj#]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hj2]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhj1]hM ubh)}(hdo_freezer_traph]j)}(hdo_freezer_traph]hdo_freezer_trap}(hjD]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhj1]hM ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj`]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\]ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjX]ubah}(h]h ]h"]h$]h&]jjuh1j3hj]hhhj1]hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhj1]hM ubah}(h]j]ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1]hM hj]hhubj4)}(hhh]jM)}(hhandle the freezer jobctl traph]hhandle the freezer jobctl trap}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj]hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhj1]hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhQ/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]jS)}(hj]h]hvoid}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj]ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj]ubjM)}(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.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj]ubjM)}(h **Context**h]j)}(hj-^h]hContext}(hj/^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+^ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj]ubjM)}(hbMust be called with **current->sighand->siglock** held, which is always released before returning.h](hMust be called with }(hjC^hhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjK^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC^ubh1 held, which is always released before returning.}(hjC^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsignal_delivered (C function)c.signal_deliveredhNtauh1hhjDhhhNhNubh)}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj^hM ubh)}(hsignal_deliveredh]j)}(hsignal_deliveredh]hsignal_delivered}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^hhhj^hM ubj4)}(h$(struct ksignal *ksig, int stepping)h](j:)}(hstruct ksignal *ksigh](j?)}(hjBh]hstruct}(hj^hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubh)}(hhh]j)}(hksignalh]hksignal}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsj^sbc.signal_deliveredasbuh1hhj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hksigh]hksig}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubj:)}(h int steppingh](j)}(hinth]hint}(hj3_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/_ubjQ)}(h h]h }(hjA_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/_ubj)}(hsteppingh]hstepping}(hjO_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj^hhhj^hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|^hhhj^hM ubah}(h]jw^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^hM hjy^hhubj4)}(hhh]jM)}(h6called after signal delivery to update blocked signalsh]h6called after signal delivery to update blocked signals}(hjy_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjv_hhubah}(h]h ]h"]h$]h&]uh1j3hjy^hhhj^hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_ubj)}(hhh](j)}(h.``struct ksignal *ksig`` kernel signal struct h](j)}(h``struct ksignal *ksig``h]jS)}(hj_h]hstruct ksignal *ksig}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_ubj)}(hhh]jM)}(hkernel signal structh]hkernel signal struct}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hj_ubj)}(hF``int stepping`` nonzero if debugger single-step or block-step in use h](j)}(h``int stepping``h]jS)}(hj_h]h int stepping}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_ubj)}(hhh]jM)}(h4nonzero if debugger single-step or block-step in useh]h4nonzero if debugger single-step or block-step in use}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`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_ubjM)}(h**Description**h]j)}(hj.`h]h Description}(hj0`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,`ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_ubjM)}(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 (}(hjD`hhhNhNubj)}(h**ksig->ka.sa.sa_mask**h]hksig->ka.sa.sa_mask}(hjL`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD`ubh= is always blocked), and the signal itself is blocked unless }(hjD`hhhNhNubjS)}(h``SA_NODEFER``h]h SA_NODEFER}(hj^`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjD`ubh is set in }(hjD`hhhNhNubj)}(h**ksig->ka.sa.sa_flags**h]hksig->ka.sa.sa_flags}(hjp`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD`ubh. Tracing is notified.}(hjD`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_restart_syscall (C function)c.sys_restart_syscallhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hlong sys_restart_syscall (void)h]h)}(hlong sys_restart_syscall(void)h](j)}(hlongh]hlong}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhj`hMo ubh)}(hsys_restart_syscallh]j)}(hsys_restart_syscallh]hsys_restart_syscall}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhj`hMo ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hj`hhhj`hMo ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hMo ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMo hj`hhubj4)}(hhh]jM)}(hrestart a system callh]hrestart a system call}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMo hj ahhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hMo ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(ajHj(ajIjJjKuh1hhhhjDhNhNubj)}(h'**Parameters** ``void`` no argumentsh](jM)}(h**Parameters**h]j)}(hj2ah]h Parameters}(hj4ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0aubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMs hj,aubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]jS)}(hjQah]hvoid}(hjSahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOaubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMu hjKaubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjgaubah}(h]h ]h"]h$]h&]uh1jhjKaubeh}(h]h ]h"]h$]h&]uh1jhjfahMu hjHaubah}(h]h ]h"]h$]h&]uh1jhj,aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h set_current_blocked (C function)c.set_current_blockedhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h+void set_current_blocked (sigset_t *newset)h]h)}(h*void set_current_blocked(sigset_t *newset)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjahM ubh)}(hset_current_blockedh]j)}(hset_current_blockedh]hset_current_blocked}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjahM ubj4)}(h(sigset_t *newset)h]j:)}(hsigset_t *newseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsjasbc.set_current_blockedasbuh1hhjaubjQ)}(h h]h }(hj bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hnewseth]hnewset}(hj&bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubah}(h]h ]h"]h$]h&]jjuh1j3hjahhhjahM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjahM ubah}(h]jaah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahM hjahhubj4)}(hhh]jM)}(hchange current->blocked maskh]hchange current->blocked mask}(hjPbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjMbhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjahM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhbjHjhbjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjrbh]h Parameters}(hjtbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpbubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjlbubj)}(hhh]j)}(h``sigset_t *newset`` new mask h](j)}(h``sigset_t *newset``h]jS)}(hjbh]hsigset_t *newset}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjbubj)}(hhh]jM)}(hnew maskh]hnew mask}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjlbubjM)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjlbubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjlbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigprocmask (C function)c.sys_rt_sigprocmaskhNtauh1hhjDhhhNhNubh)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj chhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hj chhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj chhhjchM ubh)}(hsys_rt_sigprocmaskh]j)}(hsys_rt_sigprocmaskh]hsys_rt_sigprocmask}(hj2chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.cubah}(h]h ](jjeh"]h$]h&]jjuh1hhj chhhjchM ubj4)}(hJ(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j:)}(hint howh](j)}(hinth]hint}(hjNchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJcubjQ)}(h h]h }(hj\chhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJcubj)}(hhowh]hhow}(hjjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFcubj:)}(hsigset_t __user *nseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsj4csbc.sys_rt_sigprocmaskasbuh1hhjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubh__user}(hjchhhNhNubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hnseth]hnset}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFcubj:)}(hsigset_t __user *oseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]jcc.sys_rt_sigprocmaskasbuh1hhjcubjQ)}(h h]h }(hj dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubh__user}(hjchhhNhNubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hj-dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hoseth]hoset}(hj:dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFcubj:)}(hsize_t sigsetsizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjVdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXdmodnameN classnameNjwjz)}j}]jcc.sys_rt_sigprocmaskasbuh1hhjOdubjQ)}(h h]h }(hjtdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOdubj)}(h sigsetsizeh]h sigsetsize}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFcubeh}(h]h ]h"]h$]h&]jjuh1j3hj chhhjchM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj chhhjchM ubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchM hjchhubj4)}(hhh]jM)}(h,change the list of currently blocked signalsh]h,change the list of currently blocked signals}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhjchM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjdubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]jS)}(hjdh]hint how}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjdubj)}(hhh]jM)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM hjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjehM hjdubj)}(h2``sigset_t __user * nset`` stores pending signals h](j)}(h``sigset_t __user * nset``h]jS)}(hj&eh]hsigset_t __user * nset}(hj(ehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$eubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj eubj)}(hhh]jM)}(hstores pending signalsh]hstores pending signals}(hj?ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;ehM hj(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j:)}(hstruct compat_siginfo *toh](j?)}(hjBh]hstruct}(hjhhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjgubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubh)}(hhh]j)}(hcompat_siginfoh]hcompat_siginfo}(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"hmodnameN classnameNjwjz)}j}]j)}jsjgsbc.copy_siginfo_to_external32asbuh1hhjgubjQ)}(h h]h }(hj@hhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjNhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(htoh]hto}(hj[hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubj:)}(h!const struct kernel_siginfo *fromh](j?)}(hj h]hconst}(hjthhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjphubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphubj?)}(hjBh]hstruct}(hjhhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjphubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphubh)}(hhh]j)}(hkernel_siginfoh]hkernel_siginfo}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jhjCjubjQ)}(h h]h }(hjTjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCjubh)}(hhh]j)}(hsigset_th]hsigset_t}(hjejhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgjmodnameN classnameNjwjz)}j}]j)}jsj-jsbc.do_sigtimedwaitasbuh1hhjCjubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCjubj)}(hwhichh]hwhich}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?jubj:)}(hkernel_siginfo_t *infoh](h)}(hhh]j)}(hkernel_siginfo_th]hkernel_siginfo_t}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjmodnameN classnameNjwjz)}j}]jjc.do_sigtimedwaitasbuh1hhjjubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hinfoh]hinfo}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?jubj:)}(hconst struct timespec64 *tsh](j?)}(hj h]hconst}(hjkhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj kubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj kubj?)}(hjBh]hstruct}(hj)khhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj kubjQ)}(h h]h }(hj6khhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj kubh)}(hhh]j)}(h timespec64h]h timespec64}(hjGkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjIkmodnameN classnameNjwjz)}j}]jjc.do_sigtimedwaitasbuh1hhj kubjQ)}(h h]h }(hjekhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj kubj)}(hjh]h*}(hjskhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubj)}(htsh]hts}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?jubeh}(h]h ]h"]h$]h&]jjuh1j3hjjhhhjjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjjhMubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhMhjihhubj4)}(hhh]jM)}(h.wait for queued signals specified in **which**h](h%wait for queued signals specified in }(hjkhhhNhNubj)}(h **which**h]hwhich}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj)}(hhh](j)}(h5``const sigset_t *which`` queued signals to wait for h](j)}(h``const sigset_t *which``h]jS)}(hjkh]hconst sigset_t *which}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjkubj)}(hhh]jM)}(hqueued signals to wait forh]hqueued signals to wait for}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubj)}(hN``kernel_siginfo_t *info`` if non-null, the signal's siginfo is returned here h](j)}(h``kernel_siginfo_t *info``h]jS)}(hj2lh]hkernel_siginfo_t *info}(hj4lhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0lubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj,lubj)}(hhh]jM)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjKlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGlhMhjHlubah}(h]h ]h"]h$]h&]uh1jhj,lubeh}(h]h ]h"]h$]h&]uh1jhjGlhMhjkubj)}(hF``const struct timespec64 *ts`` upper bound on process time suspensionh](j)}(h``const struct timespec64 *ts``h]jS)}(hjklh]hconst struct timespec64 *ts}(hjmlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjilubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjelubj)}(hhh]jM)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjlubah}(h]h ]h"]h$]h&]uh1jhjelubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_rt_sigtimedwait (C function)c.sys_rt_sigtimedwaithNtauh1hhjDhhhNhNubh)}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlhhhjlhMubh)}(hsys_rt_sigtimedwaith]j)}(hsys_rt_sigtimedwaith]hsys_rt_sigtimedwait}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhjlhMubj4)}(hw(const sigset_t __user *uthese, siginfo_t __user *uinfo, const struct __kernel_timespec __user *uts, size_t sigsetsize)h](j:)}(hconst sigset_t __user *utheseh](j?)}(hj h]hconst}(hjmhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjlubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubh)}(hhh]j)}(hsigset_th]hsigset_t}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"mmodnameN classnameNjwjz)}j}]j)}jsjlsbc.sys_rt_sigtimedwaitasbuh1hhjlubjQ)}(h h]h }(hj@mhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubh__user}(hjlhhhNhNubjQ)}(h h]h }(hjRmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hj`mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hutheseh]huthese}(hjmmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubj:)}(hsiginfo_t __user *uinfoh](h)}(hhh]j)}(h siginfo_th]h siginfo_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]jhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj?)}(hjBh]hstruct}(hjnhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjmubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubh)}(hhh]j)}(h__kernel_timespech]h__kernel_timespec}(hj&nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#nubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(nmodnameN classnameNjwjz)}j}]j``const sigset_t __user * uthese`` queued signals to wait for h](j)}(h"``const sigset_t __user * uthese``h]jS)}(hj2oh]hconst sigset_t __user * uthese}(hj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0oubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj,oubj)}(hhh]jM)}(hqueued signals to wait forh]hqueued signals to wait for}(hjKohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGohMhjHoubah}(h]h ]h"]h$]h&]uh1jhj,oubeh}(h]h ]h"]h$]h&]uh1jhjGohMhj)oubj)}(hP``siginfo_t __user * uinfo`` if non-null, the signal's siginfo is returned here h](j)}(h``siginfo_t __user * uinfo``h]jS)}(hjkoh]hsiginfo_t __user * uinfo}(hjmohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjioubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjeoubj)}(hhh]jM)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjeoubeh}(h]h ]h"]h$]h&]uh1jhjohMhj)oubj)}(hW``const struct __kernel_timespec __user * uts`` upper bound on process time suspension h](j)}(h/``const struct __kernel_timespec __user * uts``h]jS)}(hjoh]h+const struct __kernel_timespec __user * uts}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjoubj)}(hhh]jM)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhj)oubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]jS)}(hjoh]hsize_t sigsetsize}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjoubj)}(hhh]jM)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhj)oubeh}(h]h ]h"]h$]h&]uh1jhj oubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_kill (C function) c.sys_killhNtauh1hhjDhhhNhNubh)}(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}(hj7phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3phhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMsubjQ)}(h h]h }(hjFphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3phhhjEphMsubh)}(hsys_killh]j)}(hsys_killh]hsys_kill}(hjXphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTpubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3phhhjEphMsubj4)}(h(pid_t pid, int sig)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjwphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjypmodnameN classnameNjwjz)}j}]j)}jsjZpsb c.sys_killasbuh1hhjppubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjppubj)}(hpidh]hpid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjppubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlpubj:)}(hint sigh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hsigh]hsig}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlpubeh}(h]h ]h"]h$]h&]jjuh1j3hj3phhhjEphMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/phhhjEphMsubah}(h]j*pah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEphMshj,phhubj4)}(hhh]jM)}(hsend a signal to a processh]hsend a signal to a process}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMshjqhhubah}(h]h ]h"]h$]h&]uh1j3hj,phhhjEphMsubeh}(h]h ](jAfunctionevh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjDhNhNubj)}(hW**Parameters** ``pid_t pid`` the PID of the process ``int sig`` signal to be senth](jM)}(h**Parameters**h]j)}(hj&qh]h Parameters}(hj(qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$qubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMwhj qubj)}(hhh](j)}(h%``pid_t pid`` the PID of the process h](j)}(h ``pid_t pid``h]jS)}(hjEqh]h pid_t pid}(hjGqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMthj?qubj)}(hhh]jM)}(hthe PID of the processh]hthe PID of the process}(hj^qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZqhMthj[qubah}(h]h ]h"]h$]h&]uh1jhj?qubeh}(h]h ]h"]h$]h&]uh1jhjZqhMthjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCumodnameN classnameNjwjz)}j}]j)}jsj$usb c.sys_tgkillasbuh1hhj:uubjQ)}(h h]h }(hjauhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:uubj)}(htgidh]htgid}(hjouhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6uubj:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j]u c.sys_tgkillasbuh1hhjuubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hpidh]hpid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6uubj:)}(hint sigh](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hsigh]hsig}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6uubeh}(h]h ]h"]h$]h&]jjuh1j3hjthhhjuhMHubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjuhMHubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMHhjthhubj4)}(hhh]jM)}(h"send signal to one specific threadh]h"send signal to one specific thread}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjuhMHubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.vjHj.vjIjJjKuh1hhhhjDhNhNubj)}(hXp**Parameters** ``pid_t tgid`` the thread group ID of the thread ``pid_t pid`` the PID of the thread ``int sig`` signal to be sent **Description** This syscall also checks the **tgid** and returns -ESRCH even if the PID exists but it's not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.h](jM)}(h**Parameters**h]j)}(hj8vh]h Parameters}(hj:vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6vubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMLhj2vubj)}(hhh](j)}(h1``pid_t tgid`` the thread group ID of the thread h](j)}(h``pid_t tgid``h]jS)}(hjWvh]h pid_t tgid}(hjYvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUvubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMIhjQvubj)}(hhh]jM)}(h!the thread group ID of the threadh]h!the thread group ID of the thread}(hjpvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlvhMIhjmvubah}(h]h ]h"]h$]h&]uh1jhjQvubeh}(h]h ]h"]h$]h&]uh1jhjlvhMIhjNvubj)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]jS)}(hjvh]h pid_t pid}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMJhjvubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMJhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMJhjNvubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjvh]hint sig}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMKhjvubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMKhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMKhjNvubeh}(h]h ]h"]h$]h&]uh1jhj2vubjM)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMMhj2vubji)}(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]jM)}(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 }(hjwhhhNhNubj)}(h**tgid**h]htgid}(hj&whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh 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.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMLhjwubah}(h]h ]h"]h$]h&]uh1jhhj>whMLhj2vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_tkill (C function) c.sys_tkillhNtauh1hhjDhhhNhNubh)}(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}(hjewhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjawhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[ubjQ)}(h h]h }(hjtwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjawhhhjswhM[ubh)}(h sys_tkillh]j)}(h sys_tkillh]h sys_tkill}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjawhhhjswhM[ubj4)}(h(pid_t pid, int sig)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjwsb c.sys_tkillasbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hpidh]hpid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubj:)}(hint sigh](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hsigh]hsig}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubeh}(h]h ]h"]h$]h&]jjuh1j3hjawhhhjswhM[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]whhhjswhM[ubah}(h]jXwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjswhM[hjZwhhubj4)}(hhh]jM)}(h send signal to one specific taskh]h send signal to one specific task}(hj2xhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[hj/xhhubah}(h]h ]h"]h$]h&]uh1j3hjZwhhhjswhM[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJxjHjJxjIjJjKuh1hhhhjDhNhNubj)}(h**Parameters** ``pid_t pid`` the PID of the task ``int sig`` signal to be sent **Description** Send a signal to only one task, even if it's a CLONE_THREAD task.h](jM)}(h**Parameters**h]j)}(hjTxh]h Parameters}(hjVxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRxubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_hjNxubj)}(hhh](j)}(h"``pid_t pid`` the PID of the task h](j)}(h ``pid_t pid``h]jS)}(hjsxh]h pid_t pid}(hjuxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM\hjmxubj)}(hhh]jM)}(hthe PID of the taskh]hthe PID of the task}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM\hjxubah}(h]h ]h"]h$]h&]uh1jhjmxubeh}(h]h ]h"]h$]h&]uh1jhjxhM\hjjxubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjxh]hint sig}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM]hjxubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM]hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM]hjjxubeh}(h]h ]h"]h$]h&]uh1jhjNxubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_hjNxubji)}(hASend a signal to only one task, even if it's a CLONE_THREAD task.h]jM)}(hjxh]hCSend a signal to only one task, even if it’s a CLONE_THREAD task.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^hjxubah}(h]h ]h"]h$]h&]uh1jhhjyhM^hjNxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_rt_sigqueueinfo (C function)c.sys_rt_sigqueueinfohNtauh1hhjDhhhNhNubh)}(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}(hj5yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1yhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMxubjQ)}(h h]h }(hjDyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1yhhhjCyhMxubh)}(hsys_rt_sigqueueinfoh]j)}(hsys_rt_sigqueueinfoh]hsys_rt_sigqueueinfo}(hjVyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRyubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1yhhhjCyhMxubj4)}(h-(pid_t pid, int sig, siginfo_t __user *uinfo)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjuyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjryubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwymodnameN classnameNjwjz)}j}]j)}jsjXysbc.sys_rt_sigqueueinfoasbuh1hhjnyubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnyubj)}(hpidh]hpid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjyubj:)}(hint sigh](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hsigh]hsig}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjyubj:)}(hsiginfo_t __user *uinfoh](h)}(hhh]j)}(h siginfo_th]h siginfo_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]jyc.sys_rt_sigqueueinfoasbuh1hhjyubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubh__user}(hjyhhhNhNubjQ)}(h h]h }(hj$zhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]h*}(hj2zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(huinfoh]huinfo}(hj?zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjyubeh}(h]h ]h"]h$]h&]jjuh1j3hj1yhhhjCyhMxubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-yhhhjCyhMxubah}(h]j(yah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjCyhMxhj*yhhubj4)}(hhh]jM)}(h#send signal information to a signalh]h#send signal information to a signal}(hjizhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMxhjfzhhubah}(h]h ]h"]h$]h&]uh1j3hj*yhhhjCyhMxubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM|hjzubj)}(hhh](j)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]jS)}(hjzh]h pid_t pid}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMyhjzubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMyhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMyhjzubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjzh]hint sig}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMzhjzubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMzhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMzhjzubj)}(h3``siginfo_t __user * uinfo`` signal info to be senth](j)}(h``siginfo_t __user * uinfo``h]jS)}(hj{h]hsiginfo_t __user * uinfo}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM|hj{ubj)}(hhh]jM)}(hsignal info to be senth]hsignal info to be sent}(hj5{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM{hj2{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj1{hM|hjzubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_sigpending (C function)c.sys_sigpendinghNtauh1hhjDhhhNhNubh)}(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}(hjv{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr{hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjr{hhhj{hMubh)}(hsys_sigpendingh]j)}(hsys_sigpendingh]hsys_sigpending}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjr{hhhj{hMubj4)}(h(old_sigset_t __user *uset)h]j:)}(hold_sigset_t __user *useth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j)}jsj{sbc.sys_sigpendingasbuh1hhj{ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubh__user}(hj{hhhNhNubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(huseth]huset}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubah}(h]h ]h"]h$]h&]jjuh1j3hjr{hhhj{hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjn{hhhj{hMubah}(h]ji{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMhjk{hhubj4)}(hhh]jM)}(hexamine pending signalsh]hexamine pending signals}(hj-|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj*|hhubah}(h]h ]h"]h$]h&]uh1j3hjk{hhhj{hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjE|jHjE|jIjJjKuh1hhhhjDhNhNubj)}(hY**Parameters** ``old_sigset_t __user * uset`` where mask of pending signal is returnedh](jM)}(h**Parameters**h]j)}(hjO|h]h Parameters}(hjQ|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM|ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjI|ubj)}(hhh]j)}(hG``old_sigset_t __user * uset`` where mask of pending signal is returnedh](j)}(h``old_sigset_t __user * uset``h]jS)}(hjn|h]hold_sigset_t __user * uset}(hjp|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjl|ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjh|ubj)}(hhh]jM)}(h(where mask of pending signal is returnedh]h(where mask of pending signal is returned}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj|ubah}(h]h ]h"]h$]h&]uh1jhjh|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhje|ubah}(h]h ]h"]h$]h&]uh1jhjI|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_sigprocmask (C function)c.sys_sigprocmaskhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hVlong sys_sigprocmask (int how, old_sigset_t __user * nset, old_sigset_t __user * oset)h]h)}(hSlong sys_sigprocmask(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhj|hMubh)}(hsys_sigprocmaskh]j)}(hsys_sigprocmaskh]hsys_sigprocmask}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhj|hMubj4)}(h?(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j:)}(hint howh](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hhowh]hhow}(hj!}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hold_sigset_t __user *nseth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hj=}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?}modnameN classnameNjwjz)}j}]j)}jsj|sbc.sys_sigprocmaskasbuh1hhj6}ubjQ)}(h h]h }(hj]}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6}ubh__user}(hj6}hhhNhNubjQ)}(h h]h }(hjo}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6}ubj)}(hjh]h*}(hj}}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6}ubj)}(hnseth]hnset}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hold_sigset_t __user *oseth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]jY}c.sys_sigprocmaskasbuh1hhj}ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubh__user}(hj}hhhNhNubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hoseth]hoset}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hj|hhhj|hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|hhhj|hMubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hMhj|hhubj4)}(hhh]jM)}(h"examine and change blocked signalsh]h"examine and change blocked signals}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj~hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhj|hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3~jHj3~jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj=~h]h Parameters}(hj?~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;~ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj7~ubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]jS)}(hj\~h]hint how}(hj^~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZ~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjV~ubj)}(hhh]jM)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hju~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjq~hMhjr~ubah}(h]h ]h"]h$]h&]uh1jhjV~ubeh}(h]h ]h"]h$]h&]uh1jhjq~hMhjS~ubj)}(hF``old_sigset_t __user * nset`` signals to add or remove (if non-null) h](j)}(h``old_sigset_t __user * nset``h]jS)}(hj~h]hold_sigset_t __user * nset}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj~ubj)}(hhh]jM)}(h&signals to add or remove (if non-null)h]h&signals to add or remove (if non-null)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjS~ubj)}(hI``old_sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``old_sigset_t __user * oset``h]jS)}(hj~h]hold_sigset_t __user * oset}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj~ubj)}(hhh]jM)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjS~ubeh}(h]h ]h"]h$]h&]uh1jhj7~ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj7~ubjM)}(heSome platforms have their own version with special arguments; others support only sys_rt_sigprocmask.h]heSome platforms have their own version with special arguments; others support only sys_rt_sigprocmask.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj7~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigaction (C function)c.sys_rt_sigactionhNtauh1hhjDhhhNhNubh)}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj\hMubh)}(hsys_rt_sigactionh]j)}(hsys_rt_sigactionh]hsys_rt_sigaction}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj\hMubj4)}(h_(int sig, const struct sigaction __user *act, struct sigaction __user *oact, size_t sigsetsize)h](j:)}(hint sigh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsigh]hsig}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h"const struct sigaction __user *acth](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h sigactionh]h sigaction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjqsbc.sys_rt_sigactionasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hacth]hact}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct sigaction __user *oacth](j?)}(hjBh]hstruct}(hj_hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubh)}(hhh]j)}(h sigactionh]h sigaction}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.sys_rt_sigactionasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubh__user}(hj[hhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hoacth]hoact}(hjȀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsize_t sigsetsizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.sys_rt_sigactionasbuh1hhj݀ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj݀ubj)}(h sigsetsizeh]h sigsetsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݀ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjJhhhj\hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj\hMubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\hMhjChhubj4)}(hhh]jM)}(h"alter an action taken by a processh]h"alter an action taken by a process}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj7hhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj\hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRjHjRjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjVubj)}(hhh](j)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hj{h]hint sig}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjuubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h6``const struct sigaction __user * act`` new sigaction h](j)}(h'``const struct sigaction __user * act``h]jS)}(hjh]h#const struct sigaction __user * act}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]jM)}(h new sigactionh]h new sigaction}(hj́hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjɁhMhjʁubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɁhMhjrubj)}(hG``struct sigaction __user * oact`` used to save the previous sigaction h](j)}(h"``struct sigaction __user * oact``h]jS)}(hjh]hstruct sigaction __user * oact}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]jM)}(h#used to save the previous sigactionh]h#used to save the previous sigaction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]jS)}(hj&h]hsize_t sigsetsize}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj ubj)}(hhh]jM)}(hsize of sigset_t typeh]hsize of sigset_t type}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigsuspend (C function)c.sys_rt_sigsuspendhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hElong sys_rt_sigsuspend (sigset_t __user * unewset, size_t sigsetsize)h]h)}(hClong sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhjhMubh)}(hsys_rt_sigsuspendh]j)}(hsys_rt_sigsuspendh]hsys_rt_sigsuspend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhjhMubj4)}(h-(sigset_t __user *unewset, size_t sigsetsize)h](j:)}(hsigset_t __user *unewseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj‚modnameN classnameNjwjz)}j}]j)}jsjsbc.sys_rt_sigsuspendasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunewseth]hunewset}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsize_t sigsetsizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j܂c.sys_rt_sigsuspendasbuh1hhj"ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(h sigsetsizeh]h sigsetsize}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj|hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhjhMubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjuhhubj4)}(hhh]jM)}(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 }(hjhhhNhNubj)}(h **unewset**h]hunewset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! value until a signal is received}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj|hhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(ht**Parameters** ``sigset_t __user * unewset`` new signal mask value ``size_t sigsetsize`` size of sigset_t typeh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h4``sigset_t __user * unewset`` new signal mask value h](j)}(h``sigset_t __user * unewset``h]jS)}(hj҃h]hsigset_t __user * unewset}(hjԃhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjЃubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj̃ubj)}(hhh]jM)}(hnew signal mask valueh]hnew signal mask value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̃ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɃubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]jS)}(hj h]hsize_t sigsetsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]jM)}(hsize of sigset_t typeh]hsize of sigset_t type}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjɃubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_create (C macro)c.kthread_createhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hkthread_createh]h)}(hkthread_createh]h)}(hkthread_createh]j)}(hj_h]hkthread_create}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK#ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhj|hK#ubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hK#hjZhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjZhhhj|hK#ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubjM)}(h4``kthread_create (threadfn, data, namefmt, arg...)``h]jS)}(hjh]h0kthread_create (threadfn, data, namefmt, arg...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK%hjDhhubji)}(h%create a kthread on the current node h]jM)}(h$create a kthread on the current nodeh]h$create a kthread on the current node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK#hjubah}(h]h ]h"]h$]h&]uh1jhhjÄhK#hjDhhubj)}(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](jM)}(h**Parameters**h]j)}(hjЄh]h Parameters}(hj҄hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj΄ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK'hjʄubj)}(hhh](j)}(h/``threadfn`` the function to run in the thread h](j)}(h ``threadfn``h]jS)}(hjh]hthreadfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK$hjubj)}(hhh]jM)}(h!the function to run in the threadh]h!the function to run in the thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK$hjubj)}(h+``data`` data pointer for **threadfn\(\)** h](j)}(h``data``h]jS)}(hj(h]hdata}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK%hj"ubj)}(hhh]jM)}(h!data pointer for **threadfn\(\)**h](hdata pointer for }(hjAhhhNhNubj)}(h**threadfn\(\)**h]h threadfn()}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jLhj=hK%hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hK%hjubj)}(h;``namefmt`` printf-style format string for the thread name h](j)}(h ``namefmt``h]jS)}(hjoh]hnamefmt}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK&hjiubj)}(hhh]jM)}(h.printf-style format string for the thread nameh]h.printf-style format string for the thread name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubj)}(h&``arg...`` arguments for **namefmt**. h](j)}(h ``arg...``h]jS)}(hjh]harg...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK'hjubj)}(hhh]jM)}(harguments for **namefmt**.h](harguments for }(hjhhhNhNubj)}(h **namefmt**h]hnamefmt}(hjɅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hjubeh}(h]h ]h"]h$]h&]uh1jhjʄubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK)hjʄubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK(hjʄubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run (C macro) c.kthread_runhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h kthread_runh]h)}(h kthread_runh]h)}(h kthread_runh]j)}(hj4h]h kthread_run}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhjQhK=ubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhK=hj/hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj/hhhjQhK=ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjDhNhNubjM)}(h.``kthread_run (threadfn, data, namefmt, ...)``h]jS)}(hjph]h*kthread_run (threadfn, data, namefmt, ...)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK?hjDhhubji)}(hcreate and wake a thread. h]jM)}(hcreate and wake a thread.h]hcreate and wake a thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=hjubah}(h]h ]h"]h$]h&]uh1jhhjhK=hjDhhubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKAhjubj)}(hhh](j)}(h@``threadfn`` the function to run until signal_pending(current). h](j)}(h ``threadfn``h]jS)}(hjĆh]hthreadfn}(hjƆhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj†ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK>hjubj)}(hhh]jM)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hj݆hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjنhK>hjچubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjنhK>hjubj)}(h$``data`` data ptr for **threadfn**. h](j)}(h``data``h]jS)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK?hjubj)}(hhh]jM)}(hdata ptr for **threadfn**.h](h data ptr for }(hjhhhNhNubj)}(h **threadfn**h]hthreadfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhK?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK?hjubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]jS)}(hjHh]hnamefmt}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK@hjBubj)}(hhh]jM)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hK@hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hK@hjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj{ubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubjM)}(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).}(hj҇hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run_on_cpu (C function)c.kthread_run_on_cpuhNtauh1hhjDhhhNhNubh)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKOubh)}(hhh]j)}(h task_structh]h task_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]j)}jskthread_run_on_cpusbc.kthread_run_on_cpuasbuh1hhjhhhjhKOubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKOubh)}(hkthread_run_on_cpuh]j)}(hj>h]hkthread_run_on_cpu}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKOubj4)}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j:)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hthreadfnh]hthreadfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjsh]h(}(hj̈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hvoidh]hvoid}(hjوhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(h void *datah](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hdatah]hdata}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(hconst char *namefmth](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjȉhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj։hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKOubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKOhjhhubj4)}(hhh]jM)}(h#create and wake a cpu bound thread.h]h#create and wake a cpu bound thread.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKOhj&hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKShjEubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]jS)}(hjjh]hint (*threadfn)(void *data)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKPhjdubj)}(hhh]jM)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKPhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKPhjaubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]jS)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKQhjubj)}(hhh]jM)}(hdata ptr for **threadfn**.h](h data ptr for }(hjhhhNhNubj)}(h **threadfn**h]hthreadfn}(hjĊhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKQhjaubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]jS)}(hjh]hunsigned int cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKRhjubj)}(hhh]jM)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjaubj)}(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]jS)}(hj'h]hconst char *namefmt}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKThj!ubj)}(hhh]jM)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKShj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKThjaubeh}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKVhjEubjM)}(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).}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKVhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run_worker (C macro)c.kthread_run_workerhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hkthread_run_workerh]h)}(hkthread_run_workerh]h)}(hkthread_run_workerh]j)}(hjh]hkthread_run_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj؋jHj؋jIjJjKuh1hhhhjDhNhNubjM)}(h,``kthread_run_worker (flags, namefmt, ...)``h]jS)}(hjދh]h(kthread_run_worker (flags, namefmt, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj܋ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjDhhubji)}(h"create and wake a kthread worker. h]jM)}(h!create and wake a kthread worker.h]h!create and wake a kthread worker.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjDhhubj)}(hX.**Parameters** ``flags`` flags modifying the default behavior of the worker ``namefmt`` printf-style name for the thread. ``...`` variable arguments **Description** Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj ubj)}(hhh](j)}(h=``flags`` flags modifying the default behavior of the worker h](j)}(h ``flags``h]jS)}(hj2h]hflags}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj,ubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj)ubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]jS)}(hjkh]hnamefmt}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjeubj)}(hhh]jM)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhKhj)ubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjߌh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj݌ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj ubjM)}(h~Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h]h~Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&kthread_run_worker_on_cpu (C function)c.kthread_run_worker_on_cpuhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hestruct kthread_worker * kthread_run_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hcstruct kthread_worker *kthread_run_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j?)}(hjBh]hstruct}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj1hKubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jskthread_run_worker_on_cpusbc.kthread_run_worker_on_cpuasbuh1hhj hhhj1hKubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj1hKubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hKubh)}(hkthread_run_worker_on_cpuh]j)}(hjah]hkthread_run_worker_on_cpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj1hKubj4)}(h3(int cpu, unsigned int flags, const char namefmt[])h](j:)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjӍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjύubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjύubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjύubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjύubj)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjύubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hj h]hconst}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hcharh]hchar}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnamefmth]hnamefmt}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h[h]h[}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h]h]h]}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj1hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hKhjhhubj4)}(hhh]jM)}(h+create and wake a cpu bound kthread worker.h]h+create and wake a cpu bound kthread worker.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(hX**Parameters** ``int cpu`` CPU number ``unsigned int flags`` flags modifying the default behavior of the worker ``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** Convenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h](jM)}(h**Parameters**h]j)}(hjÎh]h Parameters}(hjŎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh](j)}(h``int cpu`` CPU number h](j)}(h ``int cpu``h]jS)}(hjh]hint cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj܎ubj)}(hhh]jM)}(h CPU numberh]h CPU number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj܎ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjَubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]jS)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjَ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]jS)}(hjTh]hconst char namefmt[]}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjNubj)}(hhh]jM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjَubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubjM)}(hConvenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h]hConvenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kthread_should_stop (C function)c.kthread_should_stophNtauh1hhjDhhhNhNubh)}(hhh](h)}(hbool kthread_should_stop (void)h]h)}(hbool kthread_should_stop(void)h](j)}(hjh]hbool}(hjՏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjяhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjяhhhjhKubh)}(hkthread_should_stoph]j)}(hkthread_should_stoph]hkthread_should_stop}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjяhhhjhKubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjяhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj͏hhhjhKubah}(h]jȏah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjʏhhubj4)}(hhh]jM)}(hshould this kthread return now?h]hshould this kthread return now?}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj8hhubah}(h]h ]h"]h$]h&]uh1j3hjʏhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjWubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj|h]hvoid}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjvubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhjsubah}(h]h ]h"]h$]h&]uh1jhjWubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjWubjM)}(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().}(hj͐hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kthread_should_park (C function)c.kthread_should_parkhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hbool kthread_should_park (void)h]h)}(hbool kthread_should_park(void)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKubh)}(hkthread_should_parkh]j)}(hkthread_should_parkh]hkthread_should_park}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKhjhhubj4)}(hhh]jM)}(hshould this kthread park now?h]hshould this kthread park now?}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj_hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj~ubjM)}(h**Description**h]j)}(hjޑh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܑubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj~ubjM)}(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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj~ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_freezable_should_stop (C function)c.kthread_freezable_should_stophNtauh1hhjDhhhNhNubh)}(hhh](h)}(h5bool kthread_freezable_should_stop (bool *was_frozen)h]h)}(h4bool kthread_freezable_should_stop(bool *was_frozen)h](j)}(hjh]hbool}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj?hKubh)}(hkthread_freezable_should_stoph]j)}(hkthread_freezable_should_stoph]hkthread_freezable_should_stop}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhj?hKubj4)}(h(bool *was_frozen)h]j:)}(hbool *was_frozenh](j)}(hjh]hbool}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h was_frozenh]h was_frozen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubah}(h]h ]h"]h$]h&]jjuh1j3hj.hhhj?hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj?hKubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hKhj'hhubj4)}(hhh]jM)}(h)should this freezable kthread return now?h]h)should this freezable kthread return now?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj?hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjؒjHjؒjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hjh]hbool *was_frozen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]jM)}(h@optional out parameter, indicates whether ``current`` was frozenh](h*optional out parameter, indicates whether }(hjhhhNhNubjS)}(h ``current``h]hcurrent}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh was frozen}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjܒubjM)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjܒubjM)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjܒubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_func (C function)c.kthread_funchNtauh1hhjDhhhNhNubh)}(hhh](h)}(h.void * kthread_func (struct task_struct *task)h]h)}(h,void *kthread_func(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(h kthread_funch]j)}(h kthread_funch]h kthread_func}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjݓhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjٓubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjٓubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjÓsbc.kthread_funcasbuh1hhjٓubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjٓubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٓubj)}(htaskh]htask}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٓubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjՓubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h1return the function specified on kthread creationh]h1return the function specified on kthread creation}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj]hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjDhNhNubj)}(h**Parameters** ``struct task_struct *task`` kthread task in question **Description** Returns NULL if the task is not a kthread.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hjh]hstruct task_struct *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]jM)}(hkthread task in questionh]hkthread task in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubjM)}(h**Description**h]j)}(hjܔh]h Description}(hjޔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڔubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj|ubjM)}(h*Returns NULL if the task is not a kthread.h]h*Returns NULL if the task is not a kthread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_data (C function)c.kthread_datahNtauh1hhjDhhhNhNubh)}(hhh](h)}(h.void * kthread_data (struct task_struct *task)h]h)}(h,void *kthread_data(struct task_struct *task)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hKubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hKubh)}(h kthread_datah]j)}(h kthread_datah]h kthread_data}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hKubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjkhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjgubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjQsbc.kthread_dataasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(htaskh]htask}(hjĕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj/hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj/hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hKhjhhubj4)}(hhh]jM)}(h/return data value specified on kthread creationh]h/return data value specified on kthread creation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hj/h]hstruct task_struct *task}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj)ubj)}(hhh]jM)}(hkthread task in questionh]hkthread task in question}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj ubjM)}(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 }(hjhhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhE was created. The caller is responsible for ensuring the validity of }(hjhhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh when calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&kthread_complete_and_exit (C function)c.kthread_complete_and_exithNtauh1hhjDhhhNhNubh)}(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}(hjӖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϖhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϖhhhjhM6ubh __noreturn}(hjϖhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϖhhhjhM6ubh)}(hkthread_complete_and_exith]j)}(hkthread_complete_and_exith]hkthread_complete_and_exit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjϖhhhjhM6ubj4)}(h$(struct completion *comp, long code)h](j:)}(hstruct completion *comph](j?)}(hjBh]hstruct}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h completionh]h completion}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_complete_and_exitasbuh1hhjubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcomph]hcomp}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h long codeh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjϖhhhjhM6ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj˖hhhjhM6ubah}(h]jƖah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM6hjȖhhubj4)}(hhh]jM)}(hExit the current kthread.h]hExit the current kthread.}(hjڗhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjחhhubah}(h]h ]h"]h$]h&]uh1j3hjȖhhhjhM6ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM:hjubj)}(hhh](j)}(h3``struct completion *comp`` Completion to complete h](j)}(h``struct completion *comp``h]jS)}(hjh]hstruct completion *comp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM7hjubj)}(hhh]jM)}(hCompletion to completeh]hCompletion to complete}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hM7hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM7hjubj)}(h=``long code`` The integer value to return to kthread_stop(). h](j)}(h ``long code``h]jS)}(hjTh]h long code}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hjNubj)}(hhh]jM)}(h.The integer value to return to kthread_stop().h]h.The integer value to return to kthread_stop().}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM8hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM8hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM:hjubjM)}(hEIf present, complete **comp** and then return code to kthread_stop().h](hIf present, complete }(hjhhhNhNubj)}(h**comp**h]hcomp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( and then return code to kthread_stop().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjubjM)}(hrA kernel thread whose module may be removed after the completion of **comp** can use this function to exit safely.h](hDA kernel thread whose module may be removed after the completion of }(hjƘhhhNhNubj)}(h**comp**h]hcomp}(hjΘhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƘubh& can use this function to exit safely.}(hjƘhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM;hjubjM)}(hDoes not return.h]hDoes not return.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kthread_create_on_node (C function)c.kthread_create_on_nodehNtauh1hhjDhhhNhNubh)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMubh)}(hhh]j)}(h task_structh]h task_struct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jskthread_create_on_nodesbc.kthread_create_on_nodeasbuh1hhjhhhj#hMubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hMubh)}(hkthread_create_on_nodeh]j)}(hjSh]hkthread_create_on_node}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hMubj4)}(hN(int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h](j:)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hthreadfnh]hthreadfn}(hjƙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjԙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *datah](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hdatah]hdata}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjϚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjݚhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjyh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(h...h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj#hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj#hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hMhj hhubj4)}(hhh]jM)}(hcreate a kthread.h]hcreate a kthread.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjdubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]jS)}(hjh]hint (*threadfn)(void *data)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]jS)}(hj›h]h void *data}(hjěhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hdata ptr for **threadfn**.h](h data ptr for }(hjۛhhhNhNubj)}(h **threadfn**h]hthreadfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۛubh.}(hjۛhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjכhMhj؛ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjכhMhjubj)}(hR``int node`` task and thread structures for the thread are allocated on this node h](j)}(h ``int node``h]jS)}(hj h]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hDtask and thread structures for the thread are allocated on this nodeh]hDtask and thread structures for the thread are allocated on this node}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h;``const char namefmt[]`` printf-style name for the thread. h](j)}(h``const char namefmt[]``h]jS)}(hjFh]hconst char namefmt[]}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj@ubj)}(hhh]jM)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjyubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjdubjM)}(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.}(hjМhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjdubjM)}(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 }(hjߜhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߜubhe, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run }(hjߜhhhNhNubj)}(h**threadfn\(\)**h]h threadfn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߜubh with }(hjߜhhhNhNubj)}(h**data**h]hdata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߜubh as its argument. }(hjߜhhhNhNubj)}(h**threadfn\(\)**h]h threadfn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߜubhX& 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().}(hjߜhhhQNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjdubjM)}(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).}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM$hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_bind (C function)c.kthread_bindhNtauh1hhjDhhhNhNubh)}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjshMQubh)}(h kthread_bindh]j)}(h kthread_bindh]h kthread_bind}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjshMQubj4)}(h)(struct task_struct *p, unsigned int cpu)h](j:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_bindasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjshMQubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjshMQubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMQhjZhhubj4)}(hhh]jM)}(h%bind a just-created kthread to a cpu.h]h%bind a just-created kthread to a cpu.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjshMQubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubj)}(hhh](j)}(h>``struct task_struct *p`` thread created by kthread_create(). h](j)}(h``struct task_struct *p``h]jS)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjϞhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj˞hMRhj̞ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˞hMRhjubj)}(hV``unsigned int cpu`` cpu (might not be online, must be possible) for **k** to run on. h](j)}(h``unsigned int cpu``h]jS)}(hjh]hunsigned int cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMShjubj)}(hhh]jM)}(h@cpu (might not be online, must be possible) for **k** to run on.h](h0cpu (might not be online, must be possible) for }(hjhhhNhNubj)}(h**k**h]hk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to run on.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubjM)}(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 }(hjRhhhNhNubj)}(h**cpu**h]hcpu}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubhi doesn’t need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"kthread_create_on_cpu (C function)c.kthread_create_on_cpuhNtauh1hhjDhhhNhNubh)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMbubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jskthread_create_on_cpusbc.kthread_create_on_cpuasbuh1hhjhhhjhMbubjQ)}(h h]h }(hjӟhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMbubh)}(hkthread_create_on_cpuh]j)}(hjПh]hkthread_create_on_cpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMbubj4)}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j:)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjsh]h(}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hthreadfnh]hthreadfn}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h)}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjsh]h(}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjȠhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj֠hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *namefmth](j?)}(hj h]hconst}(hjMhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjIubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hcharh]hchar}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMbubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMbhjhhubj4)}(hhh]jM)}(hCreate a cpu bound kthreadh]hCreate a cpu bound kthread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjӡjHjӡjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjݡh]h Parameters}(hjߡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۡubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhjסubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]jS)}(hjh]hint (*threadfn)(void *data)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMchjubj)}(hhh]jM)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]jS)}(hj5h]h void *data}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdhj/ubj)}(hhh]jM)}(hdata ptr for **threadfn**.h](h data ptr for }(hjNhhhNhNubj)}(h **threadfn**h]hthreadfn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjJhMdhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMdhjubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]jS)}(hjh]hunsigned int cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMehjzubj)}(hhh]jM)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(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]jS)}(hjh]hconst char *namefmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghjubj)}(hhh]jM)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hjҢhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhjϢubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj΢hMghjubeh}(h]h ]h"]h$]h&]uh1jhjסubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMihjסubjM)}(h6This helper function creates and names a kernel threadh]h6This helper function creates and names a kernel thread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMihjסubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_unpark (C function)c.kthread_unparkhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h+void kthread_unpark (struct task_struct *k)h]h)}(h*void kthread_unpark(struct task_struct *k)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhjHhMubh)}(hkthread_unparkh]j)}(hkthread_unparkh]hkthread_unpark}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhjHhMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hjwhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj]sbc.kthread_unparkasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hjh]h*}(hjãhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjKh]hk}(hjУhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjoubah}(h]h ]h"]h$]h&]jjuh1j3hj6hhhjHhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhjHhMubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHhMhj/hhubj4)}(hhh]jM)}(h,unpark a thread created by kthread_create().h]h,unpark a thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhjHhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hj:h]hstruct task_struct *k}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj4ubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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 }(hjhhhNhNubj)}(h**k**h]hk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhw to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_park (C function)c.kthread_parkhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h(int kthread_park (struct task_struct *k)h]h)}(h'int kthread_park(struct task_struct *k)h](j)}(hinth]hint}(hj̤hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȤhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjۤhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjȤhhhjڤhMubh)}(h kthread_parkh]j)}(h kthread_parkh]h kthread_park}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjȤhhhjڤhMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_parkasbuh1hhjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKh]hk}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjȤhhhjڤhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjĤhhhjڤhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjڤhMhjhhubj4)}(hhh]jM)}(h*park a thread created by kthread_create().h]h*park a thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjڤhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hj̥h]hstruct task_struct *k}(hjΥhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjʥubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjƥubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƥubeh}(h]h ]h"]h$]h&]uh1jhjhMhjåubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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 }(hjhhhNhNubj)}(h**k**h]hk}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_stop (C function)c.kthread_stophNtauh1hhjDhhhNhNubh)}(hhh](h)}(h(int kthread_stop (struct task_struct *k)h]h)}(h'int kthread_stop(struct task_struct *k)h](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhj{hMubh)}(h kthread_stoph]j)}(h kthread_stoph]h kthread_stop}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhj{hMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hjȦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŦubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjʦmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_stopasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjihhhj{hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhj{hMubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMhjbhhubj4)}(hhh]jM)}(h*stop a thread created by kthread_create().h]h*stop a thread created by kthread_create().}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj)hhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhj{hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjHubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]jS)}(hjmh]hstruct task_struct *k}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjgubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjHubjM)}(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 }(hjhhhNhNubj)}(h**k**h]hk}(hjƧhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjHubjM)}(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.}(hjߧhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjHubjM)}(hVReturns the result of threadfn(), or ``-EINTR`` if wake_up_process() was never called.h](h%Returns the result of threadfn(), or }(hjhhhNhNubjS)}(h ``-EINTR``h]h-EINTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh' if wake_up_process() was never called.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_stop_put (C function)c.kthread_stop_puthNtauh1hhjDhhhNhNubh)}(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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj=hMubh)}(hkthread_stop_puth]j)}(hkthread_stop_puth]hkthread_stop_put}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj=hMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubh)}(hhh]j)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjRsbc.kthread_stop_putasbuh1hhjhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hjKh]hk}(hjŨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj=hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhj=hMubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hMhj$hhubj4)}(hhh]jM)}(h%stop a thread and put its task structh]h%stop a thread and put its task struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj=hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hj/h]hstruct task_struct *k}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj)ubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubjM)}(hStops a thread created by kthread_create() and put its task_struct. Only use when holding an extra task struct reference obtained by calling get_task_struct().h]hStops a thread created by kthread_create() and put its task_struct. Only use when holding an extra task struct reference obtained by calling get_task_struct().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_affine_preferred (C function)c.kthread_affine_preferredhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hPint kthread_affine_preferred (struct task_struct *p, const struct cpumask *mask)h]h)}(hOint kthread_affine_preferred(struct task_struct *p, const struct cpumask *mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM<ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM<ubh)}(hkthread_affine_preferredh]j)}(hkthread_affine_preferredh]hkthread_affine_preferred}(hjЩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̩ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM<ubj4)}(h3(struct task_struct *p, const struct cpumask *mask)h](j:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h task_structh]h task_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjҩsbc.kthread_affine_preferredasbuh1hhjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst struct cpumask *maskh](j?)}(hj h]hconst}(hj]hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj?)}(hjBh]hstruct}(hjxhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(hcpumaskh]hcpumask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j&c.kthread_affine_preferredasbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjªhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hmaskh]hmask}(hjϪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM<ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM<ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM<hjhhubj4)}(hhh]jM)}(h%Define a kthread's preferred affinityh]h'Define a kthread’s preferred affinity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM<hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM<ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(hX**Parameters** ``struct task_struct *p`` thread created by kthread_create(). ``const struct cpumask *mask`` preferred mask of CPUs (might not be online, must be possible) for **p** to run on. **Description** Similar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread. Returns 0 if the affinity has been applied.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM@hjubj)}(hhh](j)}(h>``struct task_struct *p`` thread created by kthread_create(). h](j)}(h``struct task_struct *p``h]jS)}(hj:h]hstruct task_struct *p}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM=hj4ubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhM=hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM=hj1ubj)}(hs``const struct cpumask *mask`` preferred mask of CPUs (might not be online, must be possible) for **p** to run on. h](j)}(h``const struct cpumask *mask``h]jS)}(hjsh]hconst struct cpumask *mask}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM?hjmubj)}(hhh]jM)}(hSpreferred mask of CPUs (might not be online, must be possible) for **p** to run on.h](hCpreferred mask of CPUs (might not be online, must be possible) for }(hjhhhNhNubj)}(h**p**h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to run on.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM>hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj1ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjëhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMAhjubjM)}(hSimilar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread.h]hSimilar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread.}(hj׫hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM@hjubjM)}(h+Returns 0 if the affinity has been applied.h]h+Returns 0 if the affinity has been applied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_worker_fn (C function)c.kthread_worker_fnhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h(int kthread_worker_fn (void *worker_ptr)h]h)}(h'int kthread_worker_fn(void *worker_ptr)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMubh)}(hkthread_worker_fnh]j)}(hkthread_worker_fnh]hkthread_worker_fn}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hMubj4)}(h(void *worker_ptr)h]j:)}(hvoid *worker_ptrh](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h worker_ptrh]h worker_ptr}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj#hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj#hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hMhj hhubj4)}(hhh]jM)}(h*kthread function to process kthread_workerh]h*kthread function to process kthread_worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjǬh]h Parameters}(hjɬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŬubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(h;``void *worker_ptr`` pointer to initialized kthread_worker h](j)}(h``void *worker_ptr``h]jS)}(hjh]hvoid *worker_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(h%pointer to initialized kthread_workerh]h%pointer to initialized kthread_worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjݬubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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().}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_create_worker_on_node (C function)c.kthread_create_worker_on_nodehNtauh1hhjDhhhNhNubh)}(hhh](h)}(hostruct kthread_worker * kthread_create_worker_on_node (unsigned int flags, int node, const char namefmt[], ...)h]h)}(hmstruct kthread_worker *kthread_create_worker_on_node(unsigned int flags, int node, const char namefmt[], ...)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM5ubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jskthread_create_worker_on_nodesbc.kthread_create_worker_on_nodeasbuh1hhjhhhjhM5ubjQ)}(h h]h }(hjĭhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM5ubj)}(hjh]h*}(hjҭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubh)}(hkthread_create_worker_on_nodeh]j)}(hjh]hkthread_create_worker_on_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߭ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM5ubj4)}(h9(unsigned int flags, int node, const char namefmt[], ...)h](j:)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hflagsh]hflags}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nodeh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hnodeh]hnode}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]h[}(hjɮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjyh]h]}(hj֮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hj h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|hhhjhM5ubah}(h]jwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hjyhhubj4)}(hhh]jM)}(hcreate a kthread workerh]hcreate a kthread worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5hjhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjDhNhNubj)}(hX**Parameters** ``unsigned int flags`` flags modifying the default behavior of the worker ``int node`` task structure for the thread is allocated on this node ``const char namefmt[]`` printf-style name for the kthread worker (task). ``...`` variable arguments **Description** Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h](jM)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hj3ubj)}(hhh](j)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]jS)}(hjXh]hunsigned int flags}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjRubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM6hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM6hjOubj)}(hE``int node`` task structure for the thread is allocated on this node h](j)}(h ``int node``h]jS)}(hjh]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM7hjubj)}(hhh]jM)}(h7task structure for the thread is allocated on this nodeh]h7task structure for the thread is allocated on this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjOubj)}(hJ``const char namefmt[]`` printf-style name for the kthread worker (task). h](j)}(h``const char namefmt[]``h]jS)}(hjʯh]hconst char namefmt[]}(hj̯hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjȯubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hjįubj)}(hhh]jM)}(h0printf-style name for the kthread worker (task).h]h0printf-style name for the kthread worker (task).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj߯hM8hjubah}(h]h ]h"]h$]h&]uh1jhjįubeh}(h]h ]h"]h$]h&]uh1jhj߯hM8hjOubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj3ubjM)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)kthread_create_worker_on_cpu (C function)c.kthread_create_worker_on_cpuhNtauh1hhjDhhhNhNubh)}(hhh](h)}(hhstruct kthread_worker * kthread_create_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hfstruct kthread_worker *kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMMubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jskthread_create_worker_on_cpusbc.kthread_create_worker_on_cpuasbuh1hhjhhhjhMMubjQ)}(h h]h }(hjðhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMMubj)}(hjh]h*}(hjѰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMMubh)}(hkthread_create_worker_on_cpuh]j)}(hjh]hkthread_create_worker_on_cpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjްubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMMubj4)}(h3(int cpu, unsigned int flags, const char namefmt[])h](j:)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hflagsh]hflags}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]h[}(hjȱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjyh]h]}(hjձhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhMMubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMMhjxhhubj4)}(hhh]jM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(hX1**Parameters** ``int cpu`` CPU number ``unsigned int flags`` flags modifying the default behavior of the worker ``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** Use a valid CPU number if you want to bind the kthread worker to the given CPU and the associated NUMA node. A good practice is to add the cpu number also into the worker name. For example, use kthread_create_worker_on_cpu(cpu, "helper/``d``", cpu). CPU hotplug: The kthread worker API is simple and generic. It just provides a way to create, use, and destroy workers. It is up to the API user how to handle CPU hotplug. They have to decide how to handle pending work items, prevent queuing new ones, and restore the functionality when the CPU goes off and on. There are a few catches: - CPU affinity gets lost when it is scheduled on an offline CPU. - The worker might not exist when the CPU was off when the user created the workers. Good practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up. **Return** The pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjubj)}(hhh](j)}(h``int cpu`` CPU number h](j)}(h ``int cpu``h]jS)}(hj?h]hint cpu}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMOhj9ubj)}(hhh]jM)}(h CPU numberh]h CPU number}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMOhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMOhj6ubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]jS)}(hjxh]hunsigned int flags}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMPhjrubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMPhj6ubj)}(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]jS)}(hjh]hconst char namefmt[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj)}(hhh]jM)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hjʲhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjDzubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƲhMRhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMThjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMShjubjM)}(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/}(hjhhhNhNubjS)}(h``d``h]hd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh ”, cpu).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMVhjubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMYhjubjM)}(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:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM]hjubji)}(h- CPU affinity gets lost when it is scheduled on an offline CPU. - The worker might not exist when the CPU was off when the user created the workers. h]j C)}(hhh](j)}(h?CPU affinity gets lost when it is scheduled on an offline CPU. h]jM)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbhjXubah}(h]h ]h"]h$]h&]uh1jhjUubj)}(hSThe worker might not exist when the CPU was off when the user created the workers. h]jM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]j-Cj.Cuh1j ChjjhMbhjQubah}(h]h ]h"]h$]h&]uh1jhhjjhMbhjubjM)}(hsGood practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up.h]hsGood practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMjhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_queue_work (C function)c.kthread_queue_workhNtauh1hhjDhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkthread_queue_workh]j)}(hkthread_queue_workh]hkthread_queue_work}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h:(struct kthread_worker *worker, struct kthread_work *work)h](j:)}(hstruct kthread_worker *workerh](j?)}(hjBh]hstruct}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj$ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_queue_workasbuh1hhj$ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hstruct kthread_work *workh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jbc.kthread_queue_workasbuh1hhjubjQ)}(h h]h }(hjִhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j߳ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hqueue a kthread_workh]hqueue a kthread_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjDhNhNubj)}(hX**Parameters** ``struct kthread_worker *worker`` target kthread_worker ``struct kthread_work *work`` kthread_work to queue **Description** Queue **work** to work processor **task** for async execution. **task** must have been created with kthread_create_worker(). Returns ``true`` if **work** was successfully queued, ``false`` if it was already pending. Reinitialize the work if it needs to be used by another worker. For example, when the worker was stopped and started again.h](jM)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj7ubj)}(hhh](j)}(h8``struct kthread_worker *worker`` target kthread_worker h](j)}(h!``struct kthread_worker *worker``h]jS)}(hj\h]hstruct kthread_worker *worker}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjVubj)}(hhh]jM)}(htarget kthread_workerh]htarget kthread_worker}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubj)}(h4``struct kthread_work *work`` kthread_work to queue h](j)}(h``struct kthread_work *work``h]jS)}(hjh]hstruct kthread_work *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hkthread_work to queueh]hkthread_work to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubjM)}(h**Description**h]j)}(hjеh]h Description}(hjҵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjεubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj7ubjM)}(hQueue **work** to work processor **task** for async execution. **task** must have been created with kthread_create_worker(). Returns ``true`` if **work** was successfully queued, ``false`` if it was already pending.h](hQueue }(hjhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to work processor }(hjhhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh for async execution. }(hjhhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? must have been created with kthread_create_worker(). Returns }(hjhhhNhNubjS)}(h``true``h]htrue}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh if }(hjhhhNhNubj)}(h**work**h]hwork}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was successfully queued, }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh if it was already pending.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj7ubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_delayed_work_timer_fn (C function)c.kthread_delayed_work_timer_fnhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h9void kthread_delayed_work_timer_fn (struct timer_list *t)h]h)}(h8void kthread_delayed_work_timer_fn(struct timer_list *t)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkthread_delayed_work_timer_fnh]j)}(hkthread_delayed_work_timer_fnh]hkthread_delayed_work_timer_fn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct timer_list *t)h]j:)}(hstruct timer_list *th](j?)}(hjBh]hstruct}(hjͶhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjɶubjQ)}(h h]h }(hjڶhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjɶubh)}(hhh]j)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_delayed_work_timer_fnasbuh1hhjɶubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjɶubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɶubj)}(hjRh]ht}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɶubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjŶubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjkubj)}(hhh]j)}(h6``struct timer_list *t`` pointer to the expired timer h](j)}(h``struct timer_list *t``h]jS)}(hjh]hstruct timer_list *t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hpointer to the expired timerh]hpointer to the expired timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h**Description**h]j)}(hj˷h]h Description}(hjͷhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɷubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjkubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'kthread_queue_delayed_work (C function)c.kthread_queue_delayed_workhNtauh1hhjDhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMubh)}(hkthread_queue_delayed_workh]j)}(hkthread_queue_delayed_workh]hkthread_queue_delayed_work}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMubj4)}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j:)}(hstruct kthread_worker *workerh](j?)}(hjBh]hstruct}(hjLhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjHubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlmodnameN classnameNjwjz)}j}]j)}jsj2sbc.kthread_queue_delayed_workasbuh1hhjHubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubj:)}(h"struct kthread_delayed_work *dworkh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj˸hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkthread_delayed_workh]hkthread_delayed_work}(hjܸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٸubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj޸modnameN classnameNjwjz)}j}]jc.kthread_queue_delayed_workasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdworkh]hdwork}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubj:)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hlongh]hlong}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hdelayh]hdelay}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h0queue the associated kthread work after a delay.h]h0queue the associated kthread work after a delay.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/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]jS)}(hjѹh]hstruct kthread_worker *worker}(hjӹhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjϹubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj˹ubj)}(hhh]jM)}(htarget kthread_workerh]htarget kthread_worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˹ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjȹubj)}(hE``struct kthread_delayed_work *dwork`` kthread_delayed_work to queue h](j)}(h&``struct kthread_delayed_work *dwork``h]jS)}(hj h]h"struct kthread_delayed_work *dwork}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hkthread_delayed_work to queueh]hkthread_delayed_work to queue}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjȹubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]jS)}(hjCh]hunsigned long delay}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj=ubj)}(hhh]jM)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjȹubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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 }(hjhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. If }(hjhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) is zero, it queues the work immediately.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(h **Return**h]j)}(hjɺh]hReturn}(hj˺hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǺubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubjM)}(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](jS)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjߺubh if the }(hjߺhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߺubhi has already been pending. It means that either the timer was running or the work was queued. It returns }(hjߺhhhNhNubjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjߺubh otherwise.}(hjߺhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_flush_work (C function)c.kthread_flush_workhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h3void kthread_flush_work (struct kthread_work *work)h]h)}(h2void kthread_flush_work(struct kthread_work *work)h](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhjNhM1ubh)}(hkthread_flush_workh]j)}(hkthread_flush_workh]hkthread_flush_work}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhjNhM1ubj4)}(h(struct kthread_work *work)h]j:)}(hstruct kthread_work *workh](j?)}(hjBh]hstruct}(hj}hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubh)}(hhh]j)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjcsbc.kthread_flush_workasbuh1hhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]h*}(hjɻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hworkh]hwork}(hjֻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjuubah}(h]h ]h"]h$]h&]jjuh1j3hj<hhhjNhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhjNhM1ubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNhM1hj5hhubj4)}(hhh]jM)}(hflush a kthread_workh]hflush a kthread_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1hjhhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhjNhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(h**Parameters** ``struct kthread_work *work`` work to flush **Description** If **work** is queued or executing, wait for it to finish execution.h](jM)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5hjubj)}(hhh]j)}(h,``struct kthread_work *work`` work to flush h](j)}(h``struct kthread_work *work``h]jS)}(hjAh]hstruct kthread_work *work}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hj;ubj)}(hhh]jM)}(h work to flushh]h work to flush}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhM2hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM2hj8ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM4hjubjM)}(hDIf **work** is queued or executing, wait for it to finish execution.h](hIf }(hjhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 is queued or executing, wait for it to finish execution.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_mod_delayed_work (C function)c.kthread_mod_delayed_workhNtauh1hhjDhhhNhNubh)}(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}(hjӼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϼhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϼhhhjhMubh)}(hkthread_mod_delayed_workh]j)}(hkthread_mod_delayed_workh]hkthread_mod_delayed_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjϼhhhjhMubj4)}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j:)}(hstruct kthread_worker *workerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_mod_delayed_workasbuh1hhj ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hworkerh]hworker}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h"struct kthread_delayed_work *dworkh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubh)}(hhh]j)}(hkthread_delayed_workh]hkthread_delayed_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jIc.kthread_mod_delayed_workasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hj˽hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hdworkh]hdwork}(hjؽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hdelayh]hdelay}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjϼhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj˼hhhjhMubah}(h]jƼah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjȼhhubj4)}(hhh]jM)}(h/modify delay of or queue a kthread delayed workh]h/modify delay of or queue a kthread delayed work}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjȼhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubj)}(hhh](j)}(h8``struct kthread_worker *worker`` kthread worker to use h](j)}(h!``struct kthread_worker *worker``h]jS)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hkthread worker to useh]hkthread worker to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hE``struct kthread_delayed_work *dwork`` kthread delayed work to queue h](j)}(h&``struct kthread_delayed_work *dwork``h]jS)}(hj;h]h"struct kthread_delayed_work *dwork}(hjϾhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj˾ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjǾubj)}(hhh]jM)}(hkthread delayed work to queueh]hkthread delayed work to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǾubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]jS)}(hjh]hunsigned long delay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubjM)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubjM)}(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 }(hjWhhhNhNubj)}(h **dwork**h]hdwork}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubhH is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify }(hjWhhhNhNubj)}(h **dwork**h]hdwork}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh$’s timer so that it expires after }(hjWhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh. If }(hjWhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh is zero, }(hjWhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh( is guaranteed to be queued immediately.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubjM)}(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 }(hjhhhNhNubjS)}(h``true``h]htrue}(hjȿhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubjM)}(h?``false`` if **dwork** was idle and queued, ``true`` otherwise.h](jS)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh if }(hjhhhNhNubj)}(h **dwork**h]hdwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was idle and queued, }(hjhhhNhNubjS)}(h``true``h]htrue}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_cancel_work_sync (C function)c.kthread_cancel_work_synchNtauh1hhjDhhhNhNubh)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjvhMubh)}(hkthread_cancel_work_synch]j)}(hkthread_cancel_work_synch]hkthread_cancel_work_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjvhMubj4)}(h(struct kthread_work *work)h]j:)}(hstruct kthread_work *workh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_cancel_work_syncasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjehhhjvhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjvhMubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhMhj^hhubj4)}(hhh]jM)}(h/cancel a kthread work and wait for it to finishh]h/cancel a kthread work and wait for it to finish}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubj)}(hhh]j)}(h9``struct kthread_work *work`` the kthread work to cancel h](j)}(h``struct kthread_work *work``h]jS)}(hjih]hstruct kthread_work *work}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjcubj)}(hhh]jM)}(hthe kthread work to cancelh]hthe kthread work to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubjM)}(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 }(hjhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, }(hjhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 is guaranteed to be not pending or executing on any CPU.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubjM)}(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(}(hjhhhNhNubh)}(h+:c:type:`delayed_work->work `h]jS)}(hjh]hdelayed_work->work}(hjhhhNhNubah}(h]h ](j-jAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj9 refdomainjAreftypetype refexplicitrefwarnjwj?jB delayed_workuh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubhX) must not be used for delayed_work’s. Use kthread_cancel_delayed_work_sync() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjDubjM)}(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 }(hjhhhNhNubj)}(h**work**h]hwork}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC was last queued can’t be destroyed before this function returns.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubjM)}(h6``true`` if **work** was pending, ``false`` otherwise.h](jS)}(h``true``h]htrue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubh if }(hjXhhhNhNubj)}(h**work**h]hwork}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh was pending, }(hjXhhhNhNubjS)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubh otherwise.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-kthread_cancel_delayed_work_sync (C function)"c.kthread_cancel_delayed_work_synchNtauh1hhjDhhhNhNubh)}(hhh](h)}(hJbool kthread_cancel_delayed_work_sync (struct kthread_delayed_work *dwork)h]h)}(hIbool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *dwork)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kthread_cancel_delayed_work_synch]j)}(h kthread_cancel_delayed_work_synch]h kthread_cancel_delayed_work_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h$(struct kthread_delayed_work *dwork)h]j:)}(h"struct kthread_delayed_work *dworkh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkthread_delayed_workh]hkthread_delayed_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb"c.kthread_cancel_delayed_work_syncasbuh1hhjubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdworkh]hdwork}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h8cancel a kthread delayed work and wait for it to finish.h]h8cancel a kthread delayed work and wait for it to finish.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjuhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(hJ``struct kthread_delayed_work *dwork`` the kthread delayed work to cancel h](j)}(h&``struct kthread_delayed_work *dwork``h]jS)}(hjh]h"struct kthread_delayed_work *dwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(h"the kthread delayed work to cancelh]h"the kthread delayed work to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(h5This is kthread_cancel_work_sync() for delayed works.h]h5This is kthread_cancel_work_sync() for delayed works.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(h7``true`` if **dwork** was pending, ``false`` otherwise.h](jS)}(h``true``h]htrue}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubh if }(hj1hhhNhNubj)}(h **dwork**h]hdwork}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh was pending, }(hj1hhhNhNubjS)}(h ``false``h]hfalse}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubh otherwise.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kthread_flush_worker (C function)c.kthread_flush_workerhNtauh1hhjDhhhNhNubh)}(hhh](h)}(h9void kthread_flush_worker (struct kthread_worker *worker)h]h)}(h8void kthread_flush_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkthread_flush_workerh]j)}(hkthread_flush_workerh]hkthread_flush_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kthread_worker *worker)h]j:)}(hstruct kthread_worker *workerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_flush_workerasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hworkerh]hworker}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h+flush all current works on a kthread_workerh]h+flush all current works on a kthread_worker}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjOhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjDhNhNubj)}(h**Parameters** ``struct kthread_worker *worker`` worker to flush **Description** Wait until all currently executing or pending works on **worker** are finished.h](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM!hjnubj)}(hhh]j)}(h2``struct kthread_worker *worker`` worker to flush h](j)}(h!``struct kthread_worker *worker``h]jS)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(hworker to flushh]hworker to flush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjnubjM)}(hOWait until all currently executing or pending works on **worker** are finished.h](h7Wait until all currently executing or pending works on }(hjhhhNhNubj)}(h **worker**h]hworker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh are finished.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kthread_destroy_worker (C function)c.kthread_destroy_workerhNtauh1hhjDhhhNhNubh)}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj3hM0ubh)}(hkthread_destroy_workerh]j)}(hkthread_destroy_workerh]hkthread_destroy_worker}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj3hM0ubj4)}(h(struct kthread_worker *worker)h]j:)}(hstruct kthread_worker *workerh](j?)}(hjBh]hstruct}(hjbhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj^ubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubh)}(#hhh]j)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjHsbc.kthread_destroy_workerasbuh1hhj^ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubah}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj3hM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj3hM0ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hM0hjhhubj4)}(hhh]jM)}(hdestroy a kthread workerh]hdestroy a kthread worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj3hM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM4hjubj)}(hhh]j)}(h9``struct kthread_worker *worker`` worker to be destroyed h](j)}(h!``struct kthread_worker *worker``h]jS)}(hj&h]hstruct kthread_worker *worker}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1hj ubj)}(hhh]jM)}(hworker to be destroyedh]hworker to be destroyed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hM1hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM1hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3hjubjM)}(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 }(hjwhhhNhNubj)}(h **worker**h]hworker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh. The simple flush is enough because the kthread worker API is used only in trivial scenarios. There are no multi-step state machines needed.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjubjM)}(hNote that this function is not responsible for handling delayed work, so caller should be responsible for queuing or canceling all delayed work items before invoke this function.h]hNote that this function is not responsible for handling delayed work, so caller should be responsible for queuing or canceling all delayed work items before invoke this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_use_mm (C function)c.kthread_use_mmhNtauh1hhjDhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMLubh)}(hkthread_use_mmh]j)}(hkthread_use_mmh]hkthread_use_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMLubj4)}(h(struct mm_struct *mm)h]j:)}(hstruct mm_struct *mmh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h mm_structh]h mm_struct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_use_mmasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMLubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMLubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMLhjhhubj4)}(hhh]jM)}(h4make the calling kthread operate on an address spaceh]h4make the calling kthread operate on an address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMLubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMPhjubj)}(hhh]j)}(h4``struct mm_struct *mm`` address space to operate onh](j)}(h``struct mm_struct *mm``h]jS)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj)}(hhh]jM)}(haddress space to operate onh]haddress space to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_unuse_mm (C function)c.kthread_unuse_mmhNtauh1hhjDhhhNhNubh)}(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}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMzubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hMzubh)}(hkthread_unuse_mmh]j)}(hkthread_unuse_mmh]hkthread_unuse_mm}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hMzubj4)}(h(struct mm_struct *mm)h]j:)}(hstruct mm_struct *mmh](j?)}(hjBh]hstruct}(hj_hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubh)}(hhh]j)}(h mm_structh]h mm_struct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjEsbc.kthread_unuse_mmasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj0hMzubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj0hMzubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMzhjhhubj4)}(hhh]jM)}(h&reverse the effect of kthread_use_mm()h]h&reverse the effect of kthread_use_mm()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMzhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hMzubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjDhNhNubj)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM~hjubj)}(hhh]j)}(h4``struct mm_struct *mm`` address space to operate onh](j)}(h``struct mm_struct *mm``h]jS)}(hj#h]hstruct mm_struct *mm}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]jM)}(haddress space to operate onh]haddress space to operate on}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM{hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$kthread_associate_blkcg (C function)c.kthread_associate_blkcghNtauh1hhjDhhhNhNubh)}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjhMubh)}(hkthread_associate_blkcgh]j)}(hkthread_associate_blkcgh]hkthread_associate_blkcg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjhMubj4)}(h!(struct cgroup_subsys_state *css)h]j:)}(hstruct cgroup_subsys_state *cssh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_associate_blkcgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcssh]hcss}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhjhMubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjrhhubj4)}(hhh]jM)}(h"associate blkcg to current kthreadh]h"associate blkcg to current kthread}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjDhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjYubj)}(hhh]j)}(h4``struct cgroup_subsys_state *css`` the cgroup info h](j)}(h#``struct cgroup_subsys_state *css``h]jS)}(hj~h]hstruct cgroup_subsys_state *css}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjxubj)}(hhh]jM)}(hthe cgroup infoh]hthe cgroup info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjYubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhNhNubeh}(h]internal-functionsah ]h"]internal functionsah$]h&]uh1hhhhhhhhKFubh)}(hhh](h)}(hReference countingh]hReference counting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKUubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrefcount_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hKubh)}(h refcount_seth]j)}(h refcount_seth]h refcount_set}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj%hKubj4)}(h(refcount_t *r, int n)h](j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsj:sbc.refcount_setasbuh1hhjPubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hrh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(hint nh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj%hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj%hKubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hKhj hhubj4)}(hhh]jM)}(hset a refcount's valueh]hset a refcount’s value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj%hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(he**Parameters** ``refcount_t *r`` the refcount ``int n`` value to which the refcount will be seth](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj ubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hj1h]h refcount_t *r}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj+ubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhj(ubj)}(h1``int n`` value to which the refcount will be seth](j)}(h ``int n``h]jS)}(hjjh]hint n}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjdubj)}(hhh]jM)}(h'value to which the refcount will be seth]h'value to which the refcount will be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!refcount_set_release (C function)c.refcount_set_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h0void refcount_set_release (refcount_t *r, int n)h]h)}(h/void refcount_set_release(refcount_t *r, int n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hrefcount_set_releaseh]j)}(hrefcount_set_releaseh]hrefcount_set_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(refcount_t *r, int n)h](j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_set_releaseasbuh1hhjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nh](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]hn}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h,set a refcount's value with release orderingh]h.set a refcount’s value with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``refcount_t *r`` the refcount ``int n`` value to which the refcount will be set **Description** This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones. This function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``int n`` value to which the refcount will be set h](j)}(h ``int n``h]jS)}(hjh]hint n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]jM)}(h'value to which the refcount will be seth]h'value to which the refcount will be set}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hKhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubjM)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubjM)}(hXProvides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones.h]hXProvides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubjM)}(hXThis function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.h]hXThis function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrefcount_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h refcount_readh]j)}(h refcount_readh]h refcount_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(const refcount_t *r)h]j:)}(hconst refcount_t *rh](j?)}(hj h]hconst}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(h refcount_th]h refcount_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_readasbuh1hhj ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hr}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hget a refcount's valueh]hget a refcount’s value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``const refcount_t *r`` the refcount **Return** the refcount's valueh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j)}(h%``const refcount_t *r`` the refcount h](j)}(h``const refcount_t *r``h]jS)}(hjh]hconst refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubjM)}(hthe refcount's valueh]hthe refcount’s value}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhj]hKubh)}(hrefcount_add_not_zeroh]j)}(hrefcount_add_not_zeroh]hrefcount_add_not_zero}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhj]hKubj4)}(h(int i, refcount_t *r)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hih]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjrsbc.refcount_add_not_zeroasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjLhhhj]hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhj]hKubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]hKhjEhhubj4)}(hhh]jM)}(h(add a value to a refcount unless it is 0h]h(add a value to a refcount unless it is 0}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj%hhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhj]hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]jS)}(hjih]hint i}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjcubj)}(hhh]jM)}(h the value to add to the refcounth]h the value to add to the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj`ubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubjM)}(h-Will saturate at REFCOUNT_SATURATED and WARN.h]h-Will saturate at REFCOUNT_SATURATED and WARN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubjM)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubjM)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubjM)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*refcount_add_not_zero_acquire (C function)c.refcount_add_not_zero_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool refcount_add_not_zero_acquire (int i, refcount_t *r)h]h)}(h8bool refcount_add_not_zero_acquire(int i, refcount_t *r)h](j)}(hjh]hbool}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjthKubh)}(hrefcount_add_not_zero_acquireh]j)}(hrefcount_add_not_zero_acquireh]hrefcount_add_not_zero_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjthKubj4)}(h(int i, refcount_t *r)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_add_not_zero_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjthKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjthKubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthKhj\hhubj4)}(hhh]jM)}(h>add a value to a refcount with acquire ordering unless it is 0h]h>add a value to a refcount with acquire ordering unless it is 0}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj;hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjthKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(hX?**Parameters** ``int i`` the value to add to the refcount ``refcount_t *r`` the refcount **Description** Will saturate at REFCOUNT_SATURATED and WARN. This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. Use of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count. **Return** false if the passed refcount is 0, true otherwiseh](jM)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjyubj)}(hhh]jM)}(h the value to add to the refcounth]h the value to add to the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubjM)}(h-Will saturate at REFCOUNT_SATURATED and WARN.h]h-Will saturate at REFCOUNT_SATURATED and WARN.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubjM)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubjM)}(hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubjM)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM hjZubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubjM)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrefcount_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM'ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM'ubh)}(h refcount_addh]j)}(h refcount_addh]h refcount_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM'ubj4)}(h(int i, refcount_t *r)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_addasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM'ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM'ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM'hjhhubj4)}(hhh]jM)}(hadd a value to a refcounth]hadd a value to a refcount}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM'hjahhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM'ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM+hjubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM(hjubj)}(hhh]jM)}(h the value to add to the refcounth]h the value to add to the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM)hjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM+hjubjM)}(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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM*hjubjM)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM,hjubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxhhhjhMAubh)}(hrefcount_inc_not_zeroh]j)}(hrefcount_inc_not_zeroh]hrefcount_inc_not_zero}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjxhhhjhMAubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_inc_not_zeroasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjxhhhjhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjhMAubah}(h]joah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMAhjqhhubj4)}(hhh]jM)}(h#increment a refcount unless it is 0h]h#increment a refcount unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjhMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7jHj7jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMEhj;ubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]jS)}(hj`h]h refcount_t *r}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMBhjZubj)}(hhh]jM)}(hthe refcount to incrementh]hthe refcount to increment}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMBhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMBhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMDhj;ubjM)}(hSSimilar to atomic_inc_not_zero(), but will saturate at REFCOUNT_SATURATED and WARN.h]hSSimilar to atomic_inc_not_zero(), but will saturate at REFCOUNT_SATURATED and WARN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMChj;ubjM)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMFhj;ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMJhj;ubjM)}(h5true if the increment was successful, false otherwiseh]h5true if the increment was successful, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMKhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*refcount_inc_not_zero_acquire (C function)c.refcount_inc_not_zero_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2bool refcount_inc_not_zero_acquire (refcount_t *r)h]h)}(h1bool refcount_inc_not_zero_acquire(refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMXubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMXubh)}(hrefcount_inc_not_zero_acquireh]j)}(hrefcount_inc_not_zero_acquireh]hrefcount_inc_not_zero_acquire}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hMXubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsj8sbc.refcount_inc_not_zero_acquireasbuh1hhjNubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj#hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj#hMXubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hMXhj hhubj4)}(hhh]jM)}(h9increment a refcount with acquire ordering unless it is 0h]h9increment a refcount with acquire ordering unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXS**Parameters** ``refcount_t *r`` the refcount to increment **Description** Similar to refcount_inc_not_zero(), but provides acquire memory ordering on success. This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. **Return** true if the increment was successful, false otherwiseh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM\hjubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMYhjubj)}(hhh]jM)}(hthe refcount to incrementh]hthe refcount to increment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM[hjubjM)}(hTSimilar to refcount_inc_not_zero(), but provides acquire memory ordering on success.h]hTSimilar to refcount_inc_not_zero(), but provides acquire memory ordering on success.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMZhjubjM)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM]hjubjM)}(hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM`hjubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMdhjubjM)}(h5true if the increment was successful, false otherwiseh]h5true if the increment was successful, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrefcount_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMrubh)}(h refcount_inch]j)}(h refcount_inch]h refcount_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMrubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMrubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMrubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMrhjhhubj4)}(hhh]jM)}(hincrement a refcounth]hincrement a refcount}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMrhj`hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMrubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMvhjubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMshjubj)}(hhh]jM)}(hthe refcount to incrementh]hthe refcount to increment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMuhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMthjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMvhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhjOhMubh)}(hrefcount_sub_and_testh]j)}(hrefcount_sub_and_testh]hrefcount_sub_and_test}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhjOhMubj4)}(h(int i, refcount_t *r)h](j:)}(hint ih](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjdsbc.refcount_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhjOhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj:hhhjOhMubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMhj7hhubj4)}(hhh]jM)}(h,subtract from a refcount and test if it is 0h]h,subtract from a refcount and test if it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhjOhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubj)}(hhh](j)}(h/``int i`` amount to subtract from the refcount h](j)}(h ``int i``h]jS)}(hjZh]hint i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjTubj)}(hhh]jM)}(h$amount to subtract from the refcounth]h$amount to subtract from the refcount}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubjM)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubjM)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjThhhjehMubh)}(hrefcount_dec_and_testh]j)}(hrefcount_dec_and_testh]hrefcount_dec_and_test}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjThhhjehMubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjzsbc.refcount_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjThhhjehMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjehMubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehMhjMhhubj4)}(hhh]jM)}(h(decrement a refcount and test if it is 0h]h(decrement a refcount and test if it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhjehMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hj<h]h refcount_t *r}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj6ubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(hwSimilar to atomic_dec_and_test(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]hwSimilar to atomic_dec_and_test(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrefcount_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h refcount_dech]j)}(h refcount_dech]h refcount_dec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_decasbuh1hhj+ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hr}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hdecrement a refcounth]hdecrement a refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(ubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjshK(ubh)}(hrefcount_dec_if_oneh]j)}(hrefcount_dec_if_oneh]hrefcount_dec_if_one}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjshK(ubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_dec_if_oneasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjshK(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjshK(ubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshK(hj[hhubj4)}(hhh]jM)}(hdecrement a refcount if it is 1h]hdecrement a refcount if it is 1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(hjhhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjshK(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK,hj%ubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hjJh]h refcount_t *r}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK)hjDubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hK)hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hK)hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK+hj%ubjM)}(hYNo atomic_t counterpart, it attempts a 1 -> 0 transition and returns the success thereof.h]hYNo atomic_t counterpart, it attempts a 1 -> 0 transition and returns the success thereof.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK*hj%ubjM)}(hbLike all decrement operations, it provides release memory order and provides a control dependency.h]hbLike all decrement operations, it provides release memory order and provides a control dependency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK-hj%ubjM)}(hIt can be used like a try-delete operator; this explicit case is provided and not cmpxchg in generic, because that would allow implementing unsafe operations.h]hIt can be used like a try-delete operator; this explicit case is provided and not cmpxchg in generic, because that would allow implementing unsafe operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK0hj%ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK4hj%ubjM)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK5hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK@ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhK@ubh)}(hrefcount_dec_not_oneh]j)}(hrefcount_dec_not_oneh]hrefcount_dec_not_one}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhK@ubj4)}(h(refcount_t *r)h]j:)}(h refcount_t *rh](h)}(hhh]j)}(h refcount_th]h refcount_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsj1sbc.refcount_dec_not_oneasbuh1hhjGubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhK@ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK@ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK@hjhhubj4)}(hhh]jM)}(h#decrement a refcount if it is not 1h]h#decrement a refcount if it is not 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK@hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK@ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKAhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKAhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKChjubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKBhjubjM)}(hhjZubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubh)}(hhh]j)}(hmutexh]hmutex}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j'c.refcount_dec_and_mutex_lockasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hlockh]hlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKbubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKbhjhhubj4)}(hhh]jM)}(h7return holding mutex if able to decrement refcount to 0h]h7return holding mutex if able to decrement refcount to 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKbhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``refcount_t *r`` the refcount ``struct mutex *lock`` the mutex to be locked **Description** Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED. Provides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top. **Return** true and hold mutex if able to decrement refcount to 0, false otherwiseh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKfhjubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]jS)}(hj h]h refcount_t *r}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKdhjubj)}(hhh]jM)}(h the refcounth]h the refcount}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hKdhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hKdhjubj)}(h.``struct mutex *lock`` the mutex to be locked h](j)}(h``struct mutex *lock``h]jS)}(hjYh]hstruct mutex *lock}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKehjSubj)}(hhh]jM)}(hthe mutex to be lockedh]hthe mutex to be locked}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhKehjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhKehjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKghjubjM)}(h}Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]h}Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKfhjubjM)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKihjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKmhjubjM)}(hGtrue and hold mutex if able to decrement refcount to 0, false otherwiseh]hGtrue and hold mutex if able to decrement refcount to 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"refcount_dec_and_lock (C function)c.refcount_dec_and_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj:ubj)}(hhh]jM)}(h"saved IRQ-flags if the is acquiredh]h"saved IRQ-flags if the is acquired}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.h]hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(hJtrue and hold spinlock if able to decrement refcount to 0, false otherwiseh]hJtrue and hold spinlock if able to decrement refcount to 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]reference-countingah ]h"]reference countingah$]h&]uh1hhhhhhhhKUubh)}(hhh](h)}(hAtomicsh]hAtomics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK^ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_read (C function) c.atomic_readhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#int atomic_read (const atomic_t *v)h]h)}(h"int atomic_read(const atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h atomic_readh]j)}(h atomic_readh]h atomic_read}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hj h]hconst}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(hatomic_th]hatomic_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]j)}jsj#sb c.atomic_readasbuh1hhj9ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hvh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_read() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjh]hconst atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjRhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh with relaxed ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h;Unsafe to use in noinstr code; use raw_atomic_read() there.h]h;Unsafe to use in noinstr code; use raw_atomic_read() there.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_read_acquire (C function)c.atomic_read_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_read_acquire (const atomic_t *v)h]h)}(h*int atomic_read_acquire(const atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK%ubh)}(hatomic_read_acquireh]j)}(hatomic_read_acquireh]hatomic_read_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK%ubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hatomic_th]hatomic_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_read_acquireasbuh1hhjubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhK%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK%ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK%hjhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_read_acquire() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjh]hconst atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK&hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK(hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj,hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh with acquire ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK'hjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.h]hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK+hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_set (C function) c.atomic_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h$void atomic_set (atomic_t *v, int i)h]h)}(h#void atomic_set(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK6ubh)}(h atomic_seth]j)}(h atomic_seth]h atomic_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK6ubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_setasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint ih](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]hi}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhK6ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK6ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK6hjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK6ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK7hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK7hjubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hjh]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK8hjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hjubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to }(hjXhhhNhNubj)}(h**i**h]hi}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh with relaxed ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK9hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK;hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK=hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_set_release (C function)c.atomic_set_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKHubh)}(hatomic_set_releaseh]j)}(hatomic_set_releaseh]hatomic_set_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKHubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_set_releaseasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint ih](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKHubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKHubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKHhjhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKHubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKIhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKIhjubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hj3h]hint i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKJhj-ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhKJhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKJhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhjubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKOhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_add (C function) c.atomic_addhNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhK[ubh)}(h atomic_addh]j)}(h atomic_addh]h atomic_add}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhK[ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]hi}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj0sb c.atomic_addasbuh1hhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhK[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK[ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK[hjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj&h]hint i}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$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]jM)}(hint value to addh]hint value to add}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hK\hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hK\hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj_h]h atomic_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK]hjYubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthK]hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthK]hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK^hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK`hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKbhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKchjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_add_return (C function)c.atomic_add_returnhNtauh1hhjhhhNhNubh)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhKmubh)}(hatomic_add_returnh]j)}(hatomic_add_returnh]hatomic_add_return}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjYhKmubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjnsbc.atomic_add_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjYhKmubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjYhKmubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhKmhj@hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmhj hhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjYhKmubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhj?ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjdh]hint i}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKnhj^ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhKnhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKnhj[ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKohjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhj?ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKphj?ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKrhj?ubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKthj?ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjZhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKuhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_acquire (C function)c.atomic_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h1int atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_add_return_acquireh]j)}(hatomic_add_return_acquireh]hatomic_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjphhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj>hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh to (}(hj>hhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh + }(hj>hhhNhNubj)}(h**i**h]hi}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh) with acquire ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_release (C function)c.atomic_add_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_add_return_releaseh]j)}(hatomic_add_return_releaseh]hatomic_add_return_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]hi}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_add_return_releaseasbuh1hhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hj=h]h atomic_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj7ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_relaxed (C function)c.atomic_add_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhjIhKubh)}(hatomic_add_return_relaxedh]j)}(hatomic_add_return_relaxedh]hatomic_add_return_relaxed}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhjIhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj^sbc.atomic_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhjIhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhjIhKubah}(h]j.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhKhj0hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhjIhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj+jHj+jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjTh]hint i}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjNubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjKubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj/ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj/ubjM)}(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.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj/ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj/ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_add (C function)c.atomic_fetch_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)int atomic_fetch_add (int i, atomic_t *v)h]h)}(h(int atomic_fetch_add(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_fetch_addh]j)}(hatomic_fetch_addh]hatomic_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj`hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to (}(hj.hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh + }(hj.hhhNhNubj)}(h**i**h]hi}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh) with full ordering.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_add_acquire (C function)c.atomic_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_fetch_add_acquireh]j)}(hatomic_fetch_add_acquireh]hatomic_fetch_add_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_add_acquireasbuh1hhjHubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj-h]h atomic_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to (}(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh + }(hj~hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh) with acquire ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj) }(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_add_release (C function)c.atomic_fetch_add_releasehNtauh1hhjhhhNhNubh)}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj9hKubh)}(hatomic_fetch_add_releaseh]j)}(hatomic_fetch_add_releaseh]hatomic_fetch_add_release}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj9hKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjNsbc.atomic_fetch_add_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj'hhhj9hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj9hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hKhj hhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj9hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjDh]hint i}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj>ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKhj;ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj}h]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjwubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj:hhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_add_relaxed (C function)c.atomic_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhKubh)}(hatomic_fetch_add_relaxedh]j)}(hatomic_fetch_add_relaxedh]hatomic_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhKubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjphhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjoubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubjM)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_sub (C function) c.atomic_subhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_subh]j)}(h atomic_subh]h atomic_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjA modnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_subasbuh1hhj8 ubjQ)}(h h]h }(hj_ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8 ubj)}(hjh]h*}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 ubj)}(hjh]hv}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hint value to subtracth]hint value to subtract}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2 hMhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjX h]h Description}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjn hhhNhNubj)}(h**v**h]hv}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh to (}(hjn hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh - }(hjn hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh) with relaxed ordering.}(hjn hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_sub() there.h]h:Unsafe to use in noinstr code; use raw_atomic_sub() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_sub_return (C function)c.atomic_sub_returnhNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hatomic_sub_returnh]j)}(hatomic_sub_returnh]hatomic_sub_return}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubjQ)}(h h]h }(hjT hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB ubj)}(hjh]hi}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj> ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj, sbc.atomic_sub_returnasbuh1hhjv ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj> ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj" h]hint i}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hint value to subtracth]hint value to subtract}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7 hMhj8 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj7 hMhj ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj[ h]h atomic_t *v}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjU ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjp hMhjq ubah}(h]h ]h"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]uh1jhjp hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - }(hj hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_sub_return_acquire (C function)c.atomic_sub_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&ubjQ)}(h h]h }(hjh hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU hhhjg hM&ubh)}(hatomic_sub_return_acquireh]j)}(hatomic_sub_return_acquireh]hatomic_sub_return_acquire}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjU hhhjg hM&ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj| sbc.atomic_sub_return_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjU hhhjg hM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQ hhhjg hM&ubah}(h]jL ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjg hM&hjN hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj.hhubah}(h]h ]h"]h$]h&]uh1j3hjN hhhjg hM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIjHjIjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjMubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjrh]hint i}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjlubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjiubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjMubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjMubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjMubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjMubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_sub_return_release (C function)c.atomic_sub_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM8ubh)}(hatomic_sub_return_releaseh]j)}(hatomic_sub_return_releaseh]hatomic_sub_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM8ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_sub_return_releaseasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM8ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM8hjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hj~hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM8ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh to (}(hjLhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh - }(hjLhhhNhNubj)}(h**i**h]hi}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh) with release ordering.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_sub_return_relaxed (C function)c.atomic_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMKubh)}(hatomic_sub_return_relaxedh]j)}(hatomic_sub_return_relaxedh]hatomic_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]hi}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_sub_return_relaxedasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMKhjhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'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]jS)}(hjKh]h atomic_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjEubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hMMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_sub (C function)c.atomic_fetch_subhNtauh1hhjhhhNhNubh)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjWhM]ubh)}(hatomic_fetch_subh]j)}(hatomic_fetch_subh]hatomic_fetch_sub}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjWhM]ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjlsbc.atomic_fetch_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubeh}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjWhM]ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjWhM]ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhM]hj>hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjWhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjbh]hint i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`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]jM)}(hint value to subtracth]hint value to subtract}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhM^hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM^hjYubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj=ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj=ubjM)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj=ubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhj=ubjM)}(hThe original value of **v**.h](hThe original value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_sub_acquire (C function)c.atomic_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMpubh)}(hatomic_fetch_sub_acquireh]j)}(hatomic_fetch_sub_acquireh]hatomic_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMpubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMpubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMpubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMphjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjnhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMpubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to (}(hj<hhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh - }(hj<hhhNhNubj)}(h**i**h]hi}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh) with acquire ordering.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_sub_release (C function)c.atomic_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_fetch_sub_releaseh]j)}(hatomic_fetch_sub_releaseh]hatomic_fetch_sub_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_fetch_sub_releaseasbuh1hhjVubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj;h]h atomic_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_sub_relaxed (C function)c.atomic_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhMubh)}(hatomic_fetch_sub_relaxedh]j)}(hatomic_fetch_sub_relaxedh]hatomic_fetch_sub_relaxed}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj\sbc.atomic_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjGhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhMubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhMhj.hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjRh]hint i}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hThe original value of **v**.h](hThe original value of }(hjHhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_inc (C function) c.atomic_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid atomic_inc (atomic_t *v)h]h)}(hvoid atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_inch]j)}(h atomic_inch]h atomic_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj~hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjnh]h atomic_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_inc_return (C function)c.atomic_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#int atomic_inc_return (atomic_t *v)h]h)}(h"int atomic_inc_return(atomic_t *v)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjVhMubh)}(hatomic_inc_returnh]j)}(hatomic_inc_returnh]hatomic_inc_return}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjVhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjksbc.atomic_inc_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubah}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjVhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhjVhMubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjVhMhj=hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj- h]h atomic_t *v}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ 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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB hMhjC ubah}(h]h ]h"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]uh1jhjB hMhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh h]h Description}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj~ hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubh to (}(hj~ hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubh + 1) with full ordering.}(hj~ hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hAUnsafe to use in noinstr code; use raw_atomic_inc_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_inc_return() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_acquire (C function)c.atomic_inc_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_acquire (atomic_t *v)h]h)}(h*int atomic_inc_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj(!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj'!hMubh)}(hatomic_inc_return_acquireh]j)}(hatomic_inc_return_acquireh]hatomic_inc_return_acquire}(hj:!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj'!hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjY!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[!modnameN classnameNjwjz)}j}]j)}jsjAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjO"hhhNhNubj)}(h**v**h]hv}(hjW"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO"ubh to (}(hjO"hhhNhNubj)}(h**v**h]hv}(hji"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO"ubh + 1) with acquire ordering.}(hjO"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_release (C function)c.atomic_inc_return_releasehNtauh1hhjhhhNhNubh)}(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}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"hhhj"hMubh)}(hatomic_inc_return_releaseh]j)}(hatomic_inc_return_releaseh]hatomic_inc_return_release}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"hhhj"hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj*#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,#modnameN classnameNjwjz)}j}]j)}jsj #sbc.atomic_inc_return_releaseasbuh1hhj##ubjQ)}(h h]h }(hjJ#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj##ubj)}(hjh]h*}(hjX#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj##ubj)}(hjh]hv}(hje#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj##ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubah}(h]h ]h"]h$]h&]jjuh1j3hj"hhhj"hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"hhhj"hMubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"hMhj"hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhj"hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#jHj#jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj#h]h atomic_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubjM)}(h**Description**h]j)}(hj $h]h Description}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj $hhhNhNubj)}(h**v**h]hv}(hj($hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj $ubh to (}(hj $hhhNhNubj)}(h**v**h]hv}(hj:$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj $ubh + 1) with release ordering.}(hj $hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(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.}(hjS$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(h **Return**h]j)}(hjd$h]hReturn}(hjf$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjz$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz$ubh.}(hjz$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_relaxed (C function)c.atomic_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_relaxed (atomic_t *v)h]h)}(h*int atomic_inc_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj$hMubh)}(hatomic_inc_return_relaxedh]j)}(hatomic_inc_return_relaxedh]hatomic_inc_return_relaxed}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj$hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsj$sbc.atomic_inc_return_relaxedasbuh1hhj$ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hj)%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hv}(hj6%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$ubah}(h]h ]h"]h$]h&]jjuh1j3hj$hhhj$hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhj$hMubah}(h]j$ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$hMhj$hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\%hhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj$hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw%jHjw%jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj%h]h atomic_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj{%ubjM)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{%ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh to (}(hj%hhhNhNubj)}(h**v**h]hv}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh + 1) with relaxed ordering.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{%ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.}(hj$&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{%ubjM)}(h **Return**h]j)}(hj5&h]hReturn}(hj7&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{%ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjK&hhhNhNubj)}(h**v**h]hv}(hjS&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK&ubh.}(hjK&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_inc (C function)c.atomic_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int atomic_fetch_inc (atomic_t *v)h]h)}(h!int atomic_fetch_inc(atomic_t *v)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhj&hMubh)}(hatomic_fetch_inch]j)}(hatomic_fetch_inch]hatomic_fetch_inc}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhhj&hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j)}jsj&sbc.atomic_fetch_incasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubah}(h]h ]h"]h$]h&]jjuh1j3hj&hhhj&hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&hhhj&hMubah}(h]j&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hMhj&hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj0'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-'hhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjH'jHjH'jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjR'h]h Parameters}(hjT'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjq'h]h atomic_t *v}(hjs'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjo'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjk'ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhjk'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjh'ubah}(h]h ]h"]h$]h&]uh1jhjL'ubjM)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh + 1) with full ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubjM)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubjM)}(h **Return**h]j)}(hj(h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubjM)}(hThe original value of **v**.h](hThe original value of }(hj(hhhNhNubj)}(h**v**h]hv}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjL'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_inc_acquire (C function)c.atomic_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(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}(hj](hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjl(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY(hhhjk(hMubh)}(hatomic_fetch_inc_acquireh]j)}(hatomic_fetch_inc_acquireh]hatomic_fetch_inc_acquire}(hj~(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjY(hhhjk(hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj(sbc.atomic_fetch_inc_acquireasbuh1hhj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubah}(h]h ]h"]h$]h&]jjuh1j3hjY(hhhjk(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjU(hhhjk(hMubah}(h]jP(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjk(hMhjR(hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1j3hjR(hhhjk(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj#)h]h Parameters}(hj%)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!)ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjB)h]h atomic_t *v}(hjD)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@)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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj[)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjW)hMhjX)ubah}(h]h ]h"]h$]h&]uh1jhj<)ubeh}(h]h ]h"]h$]h&]uh1jhjW)hMhj9)ubah}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hj})h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{)ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh to (}(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh + 1) with acquire ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_acquire() there.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubjM)}(h **Return**h]j)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubjM)}(hThe original value of **v**.h](hThe original value of }(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_inc_release (C function)c.atomic_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(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}(hj.*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj**hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!ubjQ)}(h h]h }(hj=*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj**hhhj<*hM!ubh)}(hatomic_fetch_inc_releaseh]j)}(hatomic_fetch_inc_releaseh]hatomic_fetch_inc_release}(hjO*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj**hhhj<*hM!ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjn*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjp*modnameN classnameNjwjz)}j}]j)}jsjQ*sbc.atomic_fetch_inc_releaseasbuh1hhjg*ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg*ubj)}(hjh]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc*ubah}(h]h ]h"]h$]h&]jjuh1j3hj**hhhj<*hM!ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&*hhhj<*hM!ubah}(h]j!*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<*hM!hj#*hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj*hhubah}(h]h ]h"]h$]h&]uh1j3hj#*hhhj<*hM!ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj*ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj+h]h atomic_t *v}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj,+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(+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*ubjM)}(h**Description**h]j)}(hjN+h]h Description}(hjP+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL+ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hj*ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjd+hhhNhNubj)}(h**v**h]hv}(hjl+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubh to (}(hjd+hhhNhNubj)}(h**v**h]hv}(hj~+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubh + 1) with release ordering.}(hjd+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hj*ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj*ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hj*ubjM)}(hThe original value of **v**.h](hThe original value of }(hj+hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_inc_relaxed (C function)c.atomic_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj ,hM3ubh)}(hatomic_fetch_inc_relaxedh]j)}(hatomic_fetch_inc_relaxedh]hatomic_fetch_inc_relaxed}(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj ,hM3ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj?,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjA,modnameN classnameNjwjz)}j}]j)}jsj",sbc.atomic_fetch_inc_relaxedasbuh1hhj8,ubjQ)}(h h]h }(hj_,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8,ubj)}(hjh]h*}(hjm,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8,ubj)}(hjh]hv}(hjz,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4,ubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj ,hM3ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhj ,hM3ubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj ,hM3hj+hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj,hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhj ,hM3ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj,ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj,h]h atomic_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM4hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM4hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hj-h]h Description}(hj!-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj,ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj5-hhhNhNubj)}(h**v**h]hv}(hj=-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5-ubh to (}(hj5-hhhNhNubj)}(h**v**h]hv}(hjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5-ubh + 1) with relaxed ordering.}(hj5-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj,ubjM)}(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.}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj,ubjM)}(h **Return**h]j)}(hjy-h]hReturn}(hj{-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj,ubjM)}(hThe original value of **v**.h](hThe original value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_dec (C function) c.atomic_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid atomic_dec (atomic_t *v)h]h)}(hvoid atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj-hMDubh)}(h atomic_dech]j)}(h atomic_dech]h atomic_dec}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj-hMDubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j)}jsj-sb c.atomic_decasbuh1hhj .ubjQ)}(h h]h }(hj0.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj .ubj)}(hjh]h*}(hj>.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubj)}(hjh]hv}(hjK.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubah}(h]h ]h"]h$]h&]jjuh1j3hj-hhhj-hMDubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-hhhj-hMDubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMDhj-hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjt.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjq.hhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhj-hMDubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.jHj.jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhj.ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj.h]h atomic_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hMEhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMEhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhj.ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj/hhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh to (}(hj/hhhNhNubj)}(h**v**h]hv}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh - 1) with relaxed ordering.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj.ubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_dec() there.h]h:Unsafe to use in noinstr code; use raw_atomic_dec() there.}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhj.ubjM)}(h **Return**h]j)}(hjJ/h]hReturn}(hjL/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH/ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhj.ubjM)}(hNothing.h]hNothing.}(hj`/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_dec_return (C function)c.atomic_dec_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#int atomic_dec_return (atomic_t *v)h]h)}(h"int atomic_dec_return(atomic_t *v)h](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/hhhj/hMUubh)}(hatomic_dec_returnh]j)}(hatomic_dec_returnh]hatomic_dec_return}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/hhhj/hMUubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsj/sbc.atomic_dec_returnasbuh1hhj/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hv}(hj 0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubah}(h]h ]h"]h$]h&]jjuh1j3hj/hhhj/hMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhj/hMUubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hMUhj/hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj30hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhj00hhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhj/hMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjK0jHjK0jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjU0h]h Parameters}(hjW0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjO0ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjt0h]h atomic_t *v}(hjv0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjn0ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMVhj0ubah}(h]h ]h"]h$]h&]uh1jhjn0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMVhjk0ubah}(h]h ]h"]h$]h&]uh1jhjO0ubjM)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjO0ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh - 1) with full ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjO0ubjM)}(hAUnsafe to use in noinstr code; use raw_atomic_dec_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_dec_return() there.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjO0ubjM)}(h **Return**h]j)}(hj 1h]hReturn}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjO0ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj1hhhNhNubj)}(h**v**h]hv}(hj'1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjO0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_dec_return_acquire (C function)c.atomic_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_dec_return_acquire (atomic_t *v)h]h)}(h*int atomic_dec_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hj`1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMgubjQ)}(h h]h }(hjo1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\1hhhjn1hMgubh)}(hatomic_dec_return_acquireh]j)}(hatomic_dec_return_acquireh]hatomic_dec_return_acquire}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\1hhhjn1hMgubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j)}jsj1sbc.atomic_dec_return_acquireasbuh1hhj1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubah}(h]h ]h"]h$]h&]jjuh1j3hj\1hhhjn1hMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjX1hhhjn1hMgubah}(h]jS1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjn1hMghjU1hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghj2hhubah}(h]h ]h"]h$]h&]uh1j3hjU1hhhjn1hMgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj&2h]h Parameters}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhj 2ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjE2h]h atomic_t *v}(hjG2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhj?2ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZ2hMhhj[2ubah}(h]h ]h"]h$]h&]uh1jhj?2ubeh}(h]h ]h"]h$]h&]uh1jhjZ2hMhhj<2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubjM)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhj 2ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh - 1) with acquire ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihj 2ubjM)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhj 2ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhj 2ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj 2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_dec_return_release (C function)c.atomic_dec_return_releasehNtauh1hhjhhhNhNubh)}(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}(hj13hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-3hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxubjQ)}(h h]h }(hj@3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-3hhhj?3hMxubh)}(hatomic_dec_return_releaseh]j)}(hatomic_dec_return_releaseh]hatomic_dec_return_release}(hjR3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-3hhhj?3hMxubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjq3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjs3modnameN classnameNjwjz)}j}]j)}jsjT3sbc.atomic_dec_return_releaseasbuh1hhjj3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj3ubj)}(hjh]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjf3ubah}(h]h ]h"]h$]h&]jjuh1j3hj-3hhhj?3hMxubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)3hhhj?3hMxubah}(h]j$3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?3hMxhj&3hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj3hhubah}(h]h ]h"]h$]h&]uh1j3hj&3hhhj?3hMxubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hj3ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj4h]h atomic_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj4ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj/4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+4hMyhj,4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj+4hMyhj 4ubah}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjQ4h]h Description}(hjS4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hj3ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjg4hhhNhNubj)}(h**v**h]hv}(hjo4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg4ubh to (}(hjg4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg4ubh - 1) with release ordering.}(hjg4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhj3ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hj3ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hj3ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_dec_return_relaxed (C function)c.atomic_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhj5hMubh)}(hatomic_dec_return_relaxedh]j)}(hatomic_dec_return_relaxedh]hatomic_dec_return_relaxed}(hj#5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhj5hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjB5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD5modnameN classnameNjwjz)}j}]j)}jsj%5sbc.atomic_dec_return_relaxedasbuh1hhj;5ubjQ)}(h h]h }(hjb5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;5ubj)}(hjh]h*}(hjp5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;5ubj)}(hjh]hv}(hj}5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj75ubah}(h]h ]h"]h$]h&]jjuh1j3hj4hhhj5hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhj5hMubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hMhj4hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhj5hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj5h]h atomic_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hj"6h]h Description}(hj$6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj86hhhNhNubj)}(h**v**h]hv}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj86ubh to (}(hj86hhhNhNubj)}(h**v**h]hv}(hjR6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj86ubh - 1) with relaxed ordering.}(hj86hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(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.}(hjk6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h **Return**h]j)}(hj|6h]hReturn}(hj~6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_dec (C function)c.atomic_fetch_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int atomic_fetch_dec (atomic_t *v)h]h)}(h!int atomic_fetch_dec(atomic_t *v)h](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhj6hMubh)}(hatomic_fetch_dech]j)}(hatomic_fetch_dech]hatomic_fetch_dec}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhj6hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsj6sbc.atomic_fetch_decasbuh1hhj 7ubjQ)}(h h]h }(hj37hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 7ubj)}(hjh]h*}(hjA7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 7ubj)}(hjh]hv}(hjN7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubah}(h]h ]h"]h$]h&]jjuh1j3hj6hhhj6hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj6hMubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMhj6hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjw7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjt7hhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhj6hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7jHj7jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj7h]h atomic_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubjM)}(h**Description**h]j)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj 8hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubh to (}(hj 8hhhNhNubj)}(h**v**h]hv}(hj#8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubh - 1) with full ordering.}(hj 8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubjM)}(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.}(hj<8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubjM)}(h **Return**h]j)}(hjM8h]hReturn}(hjO8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubjM)}(hThe original value of **v**.h](hThe original value of }(hjc8hhhNhNubj)}(h**v**h]hv}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc8ubh.}(hjc8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_dec_acquire (C function)c.atomic_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhj8hMubh)}(hatomic_fetch_dec_acquireh]j)}(hatomic_fetch_dec_acquireh]hatomic_fetch_dec_acquire}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhj8hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsj8sbc.atomic_fetch_dec_acquireasbuh1hhj8ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hv}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubah}(h]h ]h"]h$]h&]jjuh1j3hj8hhhj8hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhj8hMubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hMhj8hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjH9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjE9hhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhj8hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`9jHj`9jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjj9h]h Parameters}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj9h]h atomic_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjd9ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh to (}(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh - 1) with acquire ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubjM)}(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.}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubjM)}(h **Return**h]j)}(hj:h]hReturn}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubjM)}(hThe original value of **v**.h](hThe original value of }(hj4:hhhNhNubj)}(h**v**h]hv}(hj<:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4:ubh.}(hj4:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjd9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_dec_release (C function)c.atomic_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(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}(hju:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjq:hhhj:hMubh)}(hatomic_fetch_dec_releaseh]j)}(hatomic_fetch_dec_releaseh]hatomic_fetch_dec_release}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjq:hhhj:hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsj:sbc.atomic_fetch_dec_releaseasbuh1hhj:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjq:hhhj:hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjm:hhhj:hMubah}(h]jh:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:hMhjj:hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1j3hjj:hhhj:hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1;jHj1;jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;;h]h Parameters}(hj=;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjZ;h]h atomic_t *v}(hj\;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjT;ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjs;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjo;hMhjp;ubah}(h]h ]h"]h$]h&]uh1jhjT;ubeh}(h]h ]h"]h$]h&]uh1jhjo;hMhjQ;ubah}(h]h ]h"]h$]h&]uh1jhj5;ubjM)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh - 1) with release ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubjM)}(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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubjM)}(hThe original value of **v**.h](hThe original value of }(hj<hhhNhNubj)}(h**v**h]hv}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_dec_relaxed (C function)c.atomic_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjF<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjU<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB<hhhjT<hMubh)}(hatomic_fetch_dec_relaxedh]j)}(hatomic_fetch_dec_relaxedh]hatomic_fetch_dec_relaxed}(hjg<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjB<hhhjT<hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsji<sbc.atomic_fetch_dec_relaxedasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{<ubah}(h]h ]h"]h$]h&]jjuh1j3hjB<hhhjT<hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj><hhhjT<hMubah}(h]j9<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjT<hMhj;<hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1j3hj;<hhhjT<hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj =h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj =ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj+=h]h atomic_t *v}(hj-=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)=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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjD=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@=hMhjA=ubah}(h]h ]h"]h$]h&]uh1jhj%=ubeh}(h]h ]h"]h$]h&]uh1jhj@=hMhj"=ubah}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hjf=h]h Description}(hjh=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj|=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|=ubh to (}(hj|=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|=ubh - 1) with relaxed ordering.}(hj|=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(hThe original value of **v**.h](hThe original value of }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_and (C function) c.atomic_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$void atomic_and (int i, atomic_t *v)h]h)}(h#void atomic_and(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj&>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj%>hMubh)}(h atomic_andh]j)}(h atomic_andh]h atomic_and}(hj8>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj%>hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjT>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>ubjQ)}(h h]h }(hjb>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP>ubj)}(hjh]hi}(hjp>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjL>ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsj:>sb c.atomic_andasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjL>ubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj%>hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj%>hMubah}(h]j >ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%>hMhj >hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>hhubah}(h]h ]h"]h$]h&]uh1j3hj >hhhj%>hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj0?h]hint i}(hj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.?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]jM)}(h int valueh]h int value}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjE?hMhjF?ubah}(h]h ]h"]h$]h&]uh1jhj*?ubeh}(h]h ]h"]h$]h&]uh1jhjE?hMhj'?ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hji?h]h atomic_t *v}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjg?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjc?ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjc?ubeh}(h]h ]h"]h$]h&]uh1jhj~?hMhj'?ubeh}(h]h ]h"]h$]h&]uh1jhj ?ubjM)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ?ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh to (}(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh & }(hj?hhhNhNubj)}(h**i**h]hi}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh) with relaxed ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ?ubjM)}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ?ubjM)}(h **Return**h]j)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ?ubjM)}(hNothing.h]hNothing.}(hj&@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_and (C function)c.atomic_fetch_andhNtauh1hhjhhhNhNubh)}(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}(hjU@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ@hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjd@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQ@hhhjc@hMubh)}(hatomic_fetch_andh]j)}(hatomic_fetch_andh]hatomic_fetch_and}(hjv@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQ@hhhjc@hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]hi}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsjx@sbc.atomic_fetch_andasbuh1hhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hjQ@hhhjc@hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjM@hhhjc@hMubah}(h]jH@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjc@hMhjJ@hhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hj-AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*Ahhubah}(h]h ]h"]h$]h&]uh1j3hjJ@hhhjc@hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEAjHjEAjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjOAh]h Parameters}(hjQAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjnAh]hint i}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhAubj)}(hhh]jM)}(h int valueh]h int value}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjhAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjeAubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjAh]h atomic_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjeAubeh}(h]h ]h"]h$]h&]uh1jhjIAubjM)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjAhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh to (}(hjAhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh & }(hjAhhhNhNubj)}(h**i**h]hi}(hj$BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh) with full ordering.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubjM)}(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=BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubjM)}(h **Return**h]j)}(hjNBh]hReturn}(hjPBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubjM)}(hThe original value of **v**.h](hThe original value of }(hjdBhhhNhNubj)}(h**v**h]hv}(hjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdBubh.}(hjdBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_and_acquire (C function)c.atomic_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjBhMubh)}(hatomic_fetch_and_acquireh]j)}(hatomic_fetch_and_acquireh]hatomic_fetch_and_acquire}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjBhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsjBsbc.atomic_fetch_and_acquireasbuh1hhjCubjQ)}(h h]h }(hj9ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjGChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]hv}(hjTChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hjBhhhjBhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjBhMubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMhjBhhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj}ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzChhubah}(h]h ]h"]h$]h&]uh1j3hjBhhhjBhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjCh]hint i}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj)}(hhh]jM)}(h int valueh]h int value}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjCh]h atomic_t *v}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj DhMhj Dubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj DhMhjCubeh}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hj2Dh]h Description}(hj4DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Dubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjHDhhhNhNubj)}(h**v**h]hv}(hjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHDubh to (}(hjHDhhhNhNubj)}(h**v**h]hv}(hjbDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHDubh & }(hjHDhhhNhNubj)}(h**i**h]hi}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHDubh) with acquire ordering.}(hjHDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_and_release (C function)c.atomic_fetch_and_releasehNtauh1hhjhhhNhNubh)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjEhMubh)}(hatomic_fetch_and_releaseh]j)}(hatomic_fetch_and_releaseh]hatomic_fetch_and_release}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjEhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj2EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.EubjQ)}(h h]h }(hj@EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.Eubj)}(hjh]hi}(hjNEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*Eubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjiEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkEmodnameN classnameNjwjz)}j}]j)}jsjEsbc.atomic_fetch_and_releaseasbuh1hhjbEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbEubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*Eubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjEhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjEhMubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhMhjDhhubj4)}(hhh]jM)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhjEhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjFh]hint i}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Fubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjFubj)}(hhh]jM)}(h int valueh]h int value}(hj'FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#FhMhj$Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj#FhMhjFubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjGFh]h atomic_t *v}(hjIFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAFubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj`FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\FhMhj]Fubah}(h]h ]h"]h$]h&]uh1jhjAFubeh}(h]h ]h"]h$]h&]uh1jhj\FhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh to (}(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh & }(hjFhhhNhNubj)}(h**i**h]hi}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh) with release ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(h **Return**h]j)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(hThe original value of **v**.h](hThe original value of }(hjGhhhNhNubj)}(h**v**h]hv}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_and_relaxed (C function)c.atomic_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjEGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hjTGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAGhhhjSGhM+ubh)}(hatomic_fetch_and_relaxedh]j)}(hatomic_fetch_and_relaxedh]hatomic_fetch_and_relaxed}(hjfGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbGubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAGhhhjSGhM+ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~GubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~Gubj)}(hjh]hi}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Gubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzGubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjhGsbc.atomic_fetch_and_relaxedasbuh1hhjGubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]hv}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzGubeh}(h]h ]h"]h$]h&]jjuh1j3hjAGhhhjSGhM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=GhhhjSGhM+ubah}(h]j8Gah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjSGhM+hj:Ghhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjHhhubah}(h]h ]h"]h$]h&]uh1j3hj:GhhhjSGhM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5HjHj5HjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?Hh]h Parameters}(hjAHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Hubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj9Hubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj^Hh]hint i}(hj`HhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\Hubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjXHubj)}(hhh]jM)}(h int valueh]h int value}(hjwHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjsHhM,hjtHubah}(h]h ]h"]h$]h&]uh1jhjXHubeh}(h]h ]h"]h$]h&]uh1jhjsHhM,hjUHubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjHh]h atomic_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjHubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhM-hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM-hjUHubeh}(h]h ]h"]h$]h&]uh1jhj9HubjM)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj9HubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjHhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh to (}(hjHhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh & }(hjHhhhNhNubj)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh) with relaxed ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj9HubjM)}(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.}(hj-IhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj9HubjM)}(h **Return**h]j)}(hj>Ih]hReturn}(hj@IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhjJubj)}(hhh]jM)}(h int valueh]h int value}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhM>hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM>hjJubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjJh]h atomic_t *v}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjJubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhM?hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM?hjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjM)}(h**Description**h]j)}(hj"Kh]h Description}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Kubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjJubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj8KhhhNhNubj)}(h**v**h]hv}(hj@KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8Kubh to (}(hj8KhhhNhNubj)}(h**v**h]hv}(hjRKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8Kubh & }(hj8KhhhNhNubj)}(h**~i**h]h~i}(hjdKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8Kubh) with relaxed ordering.}(hj8KhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjJubjM)}(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.}(hj}KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjJubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjJubjM)}(hNothing.h]hNothing.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_fetch_andnot (C function)c.atomic_fetch_andnothNtauh1hhjhhhNhNubh)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhMOubh)}(hatomic_fetch_andnoth]j)}(hatomic_fetch_andnoth]hatomic_fetch_andnot}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhjKhMOubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj LubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Lubj)}(hjh]hi}(hj,LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Lubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjGLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjILmodnameN classnameNjwjz)}j}]j)}jsjKsbc.atomic_fetch_andnotasbuh1hhj@LubjQ)}(h h]h }(hjgLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@Lubj)}(hjh]h*}(hjuLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Lubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Lubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubeh}(h]h ]h"]h$]h&]jjuh1j3hjKhhhjKhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjKhMOubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhMOhjKhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjKhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjLubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjLh]hint i}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjLubj)}(hhh]jM)}(h int valueh]h int value}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMPhjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjMhMPhjLubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj%Mh]h atomic_t *v}(hj'MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#Mubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj>MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:MhMQhj;Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj:MhMQhjLubeh}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hj`Mh]h Description}(hjbMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Mubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjLubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjvMhhhNhNubj)}(h**v**h]hv}(hj~MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvMubh to (}(hjvMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvMubh & }(hjvMhhhNhNubj)}(h**~i**h]h~i}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvMubh) with full ordering.}(hjvMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjLubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjLubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjLubjM)}(hThe original value of **v**.h](hThe original value of }(hjMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_fetch_andnot_acquire (C function)c.atomic_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(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}(hj#NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbubjQ)}(h h]h }(hj2NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhj1NhMbubh)}(hatomic_fetch_andnot_acquireh]j)}(hatomic_fetch_andnot_acquireh]hatomic_fetch_andnot_acquire}(hjDNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Nubah}(h]h ](jjeh"]h$]h&]jjuh1hhjNhhhj1NhMbubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj`NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\NubjQ)}(h h]h }(hjnNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\Nubj)}(hjh]hi}(hj|NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Nubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXNubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjFNsbc.atomic_fetch_andnot_acquireasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXNubeh}(h]h ]h"]h$]h&]jjuh1j3hjNhhhj1NhMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNhhhj1NhMbubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1NhMbhjNhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjNhhhj1NhMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjOubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:Oubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj6Oubj)}(hhh]jM)}(h int valueh]h int value}(hjUOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQOhMchjROubah}(h]h ]h"]h$]h&]uh1jhj6Oubeh}(h]h ]h"]h$]h&]uh1jhjQOhMchj3Oubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjuOh]h atomic_t *v}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjoOubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMdhjOubah}(h]h ]h"]h$]h&]uh1jhjoOubeh}(h]h ]h"]h$]h&]uh1jhjOhMdhj3Oubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjOubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh & }(hjOhhhNhNubj)}(h**~i**h]h~i}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh) with acquire ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjOubjM)}(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.}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjOubjM)}(h **Return**h]j)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjOubjM)}(hThe original value of **v**.h](hThe original value of }(hj2PhhhNhNubj)}(h**v**h]hv}(hj:PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Pubh.}(hj2PhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_fetch_andnot_release (C function)c.atomic_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(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}(hjsPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMtubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoPhhhjPhMtubh)}(hatomic_fetch_andnot_releaseh]j)}(hatomic_fetch_andnot_releaseh]hatomic_fetch_andnot_release}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjoPhhhjPhMtubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]hi}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsjPsbc.atomic_fetch_andnot_releaseasbuh1hhjPubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]hv}(hj"QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjoPhhhjPhMtubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkPhhhjPhMtubah}(h]jfPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMthjhPhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjKQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjHQhhubah}(h]h ]h"]h$]h&]uh1j3hjhPhhhjPhMtubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcQjHjcQjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjmQh]h Parameters}(hjoQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjgQubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjQh]hint i}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjQubj)}(hhh]jM)}(h int valueh]h int value}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMuhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMuhjQubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjQh]h atomic_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjQubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMvhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMvhjQubeh}(h]h ]h"]h$]h&]uh1jhjgQubjM)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjgQubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh to (}(hjRhhhNhNubj)}(h**v**h]hv}(hj0RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh & }(hjRhhhNhNubj)}(h**~i**h]h~i}(hjBRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh) with release ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjgQubjM)}(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.}(hj[RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjgQubjM)}(h **Return**h]j)}(hjlRh]hReturn}(hjnRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjgQubjM)}(hThe original value of **v**.h](hThe original value of }(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjgQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_fetch_andnot_relaxed (C function)c.atomic_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhjRhMubh)}(hatomic_fetch_andnot_relaxedh]j)}(hatomic_fetch_andnot_relaxedh]hatomic_fetch_andnot_relaxed}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhjRhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]hi}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj7ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Subah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9SmodnameN classnameNjwjz)}j}]j)}jsjRsbc.atomic_fetch_andnot_relaxedasbuh1hhj0SubjQ)}(h h]h }(hjWShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0Subj)}(hjh]h*}(hjeShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Subj)}(hjh]hv}(hjrShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubeh}(h]h ]h"]h$]h&]jjuh1j3hjRhhhjRhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjRhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhMhjRhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjRhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjSh]hint i}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubj)}(hhh]jM)}(h int valueh]h int value}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjTh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj.ThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*ThMhj+Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj*ThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjPTh]h Description}(hjRThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjfThhhNhNubj)}(h**v**h]hv}(hjnThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfTubh to (}(hjfThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfTubh & }(hjfThhhNhNubj)}(h**~i**h]h~i}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfTubh) with relaxed ordering.}(hjfThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubjM)}(hThe original value of **v**.h](hThe original value of }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_or (C function) c.atomic_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#void atomic_or (int i, atomic_t *v)h]h)}(h"void atomic_or(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj"UhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhj!UhMubh)}(h atomic_orh]j)}(h atomic_orh]h atomic_or}(hj4UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Uubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhj!UhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjPUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLUubjQ)}(h h]h }(hj^UhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLUubj)}(hjh]hi}(hjlUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHUubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsj6Usb c.atomic_orasbuh1hhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHUubeh}(h]h ]h"]h$]h&]jjuh1j3hjUhhhj!UhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Uhhhj!UhMubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!UhMhjUhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhj!UhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_or() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj Vh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Vubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj,Vh]hint i}(hj.VhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Vubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Vubj)}(hhh]jM)}(h int valueh]h int value}(hjEVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAVhMhjBVubah}(h]h ]h"]h$]h&]uh1jhj&Vubeh}(h]h ]h"]h$]h&]uh1jhjAVhMhj#Vubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjeVh]h atomic_t *v}(hjgVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_Vubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj~VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzVhMhj{Vubah}(h]h ]h"]h$]h&]uh1jhj_Vubeh}(h]h ]h"]h$]h&]uh1jhjzVhMhj#Vubeh}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh | }(hjVhhhNhNubj)}(h**i**h]hi}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(h9Unsafe to use in noinstr code; use raw_atomic_or() there.h]h9Unsafe to use in noinstr code; use raw_atomic_or() there.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(h **Return**h]j)}(hj Wh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Wubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(hNothing.h]hNothing.}(hj"WhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_or (C function)c.atomic_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(int atomic_fetch_or (int i, atomic_t *v)h]h)}(h'int atomic_fetch_or(int i, atomic_t *v)h](j)}(hinth]hint}(hjQWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj`WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMWhhhj_WhMubh)}(hatomic_fetch_orh]j)}(hatomic_fetch_orh]hatomic_fetch_or}(hjrWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMWhhhj_WhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]hi}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjtWsbc.atomic_fetch_orasbuh1hhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(h]h ]h"]h$]h&]jjuh1j3hjMWhhhj_WhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIWhhhj_WhMubah}(h]jDWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_WhMhjFWhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj)XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Xhhubah}(h]h ]h"]h$]h&]uh1j3hjFWhhhj_WhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAXjHjAXjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjKXh]h Parameters}(hjMXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjjXh]hint i}(hjlXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjdXubj)}(hhh]jM)}(h int valueh]h int value}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjdXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjaXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjaXubeh}(h]h ]h"]h$]h&]uh1jhjEXubjM)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh | }(hjXhhhNhNubj)}(h**i**h]hi}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with full ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubjM)}(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.}(hj9YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubjM)}(h **Return**h]j)}(hjJYh]hReturn}(hjLYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubjM)}(hThe original value of **v**.h](hThe original value of }(hj`YhhhNhNubj)}(h**v**h]hv}(hjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Yubh.}(hj`YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_fetch_or_acquire (C function)c.atomic_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMubh)}(hatomic_fetch_or_acquireh]j)}(hatomic_fetch_or_acquireh]hatomic_fetch_or_acquire}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]hi}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.atomic_fetch_or_acquireasbuh1hhjZubjQ)}(h h]h }(hj5ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjCZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjPZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjYhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjYhMubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhMhjYhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjyZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvZhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjZh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh]jM)}(h int valueh]h int value}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMhjZubah}(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]jS)}(hjZh]h atomic_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj [ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubjM)}(h**Description**h]j)}(hj.[h]h Description}(hj0[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,[ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjD[hhhNhNubj)}(h**v**h]hv}(hjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD[ubh to (}(hjD[hhhNhNubj)}(h**v**h]hv}(hj^[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD[ubh | }(hjD[hhhNhNubj)}(h**i**h]hi}(hjp[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD[ubh) with acquire ordering.}(hjD[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_acquire() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_acquire() there.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_fetch_or_release (C function)c.atomic_fetch_or_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h0int atomic_fetch_or_release (int i, atomic_t *v)h]h)}(h/int atomic_fetch_or_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hMubh)}(hatomic_fetch_or_releaseh]j)}(hatomic_fetch_or_releaseh]hatomic_fetch_or_release}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhj[hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj.\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*\ubjQ)}(h h]h }(hj<\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*\ubj)}(hjh]hi}(hjJ\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&\ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hje\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjg\modnameN classnameNjwjz)}j}]j)}jsj\sbc.atomic_fetch_or_releaseasbuh1hhj^\ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^\ubj)}(hjh]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&\ubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhj[hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhj[hMubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hMhj[hhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj ]h]hint i}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]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]jM)}(h int valueh]h int value}(hj#]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]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]jS)}(hjC]h]h atomic_t *v}(hjE]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjA]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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj\]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjX]hMhjY]ubah}(h]h ]h"]h$]h&]uh1jhj=]ubeh}(h]h ]h"]h$]h&]uh1jhjX]hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h**Description**h]j)}(hj~]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh to (}(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh | }(hj]hhhNhNubj)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh) with release ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_release() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_release() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubjM)}(hThe original value of **v**.h](hThe original value of }(hj^hhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_fetch_or_relaxed (C function)c.atomic_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h0int atomic_fetch_or_relaxed (int i, atomic_t *v)h]h)}(h/int atomic_fetch_or_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjA^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjP^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=^hhhjO^hMubh)}(hatomic_fetch_or_relaxedh]j)}(hatomic_fetch_or_relaxedh]hatomic_fetch_or_relaxed}(hjb^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=^hhhjO^hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj~^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjz^ubj)}(hjh]hi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv^ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsjd^sbc.atomic_fetch_or_relaxedasbuh1hhj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj=^hhhjO^hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9^hhhjO^hMubah}(h]j4^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjO^hMhj6^hhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1j3hj6^hhhjO^hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1_jHj1_jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj;_h]h Parameters}(hj=_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjZ_h]hint i}(hj\_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjT_ubj)}(hhh]jM)}(h int valueh]h int value}(hjs_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjo_hMhjp_ubah}(h]h ]h"]h$]h&]uh1jhjT_ubeh}(h]h ]h"]h$]h&]uh1jhjo_hMhjQ_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj_h]h atomic_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjQ_ubeh}(h]h ]h"]h$]h&]uh1jhj5_ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh | }(hj_hhhNhNubj)}(h**i**h]hi}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh) with relaxed ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there.}(hj)`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubjM)}(h **Return**h]j)}(hj:`h]hReturn}(hj<`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubjM)}(hThe original value of **v**.h](hThe original value of }(hjP`hhhNhNubj)}(h**v**h]hv}(hjX`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP`ubh.}(hjP`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_xor (C function) c.atomic_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$void atomic_xor (int i, atomic_t *v)h]h)}(h#void atomic_xor(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhj`hMubh)}(h atomic_xorh]j)}(h atomic_xorh]h atomic_xor}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhj`hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]hi}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsj`sb c.atomic_xorasbuh1hhj`ubjQ)}(h h]h }(hj%ahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hj3ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hj@ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj`hhhj`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hMubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMhj`hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjiahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfahhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_xor() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjah]hint i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh]jM)}(h int valueh]h int value}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjah]h atomic_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h**Description**h]j)}(hjbh]h Description}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj4bhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh) with release ordering.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjchubjM)}(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.}(hjWihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjchubjM)}(h **Return**h]j)}(hjhih]hReturn}(hjjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjchubjM)}(hThe original value of **v**.h](hThe original value of }(hj~ihhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~iubh.}(hj~ihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjchubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_xor_relaxed (C function)c.atomic_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?ubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjihM?ubh)}(hatomic_fetch_xor_relaxedh]j)}(hatomic_fetch_xor_relaxedh]hatomic_fetch_xor_relaxed}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhjihM?ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hj jhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]hi}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj3jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0jubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5jmodnameN classnameNjwjz)}j}]j)}jsjisbc.atomic_fetch_xor_relaxedasbuh1hhj,jubjQ)}(h h]h }(hjSjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,jubj)}(hjh]h*}(hjajhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,jubj)}(hjh]hv}(hjnjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,jubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubeh}(h]h ]h"]h$]h&]jjuh1j3hjihhhjihM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjihM?ubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihM?hjihhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjjhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjihM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjjh]hint i}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjjubj)}(hhh]jM)}(h int valueh]h int value}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhM@hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhM@hjjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjkh]h atomic_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj kubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj*khhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&khMAhj'kubah}(h]h ]h"]h$]h&]uh1jhj kubeh}(h]h ]h"]h$]h&]uh1jhj&khMAhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubjM)}(h**Description**h]j)}(hjLkh]h Description}(hjNkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJkubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjbkhhhNhNubj)}(h**v**h]hv}(hjjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbkubh to (}(hjbkhhhNhNubj)}(h**v**h]hv}(hj|khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbkubh ^ }(hjbkhhhNhNubj)}(h**i**h]hi}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbkubh) with relaxed ordering.}(hjbkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjjubjM)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjjubjM)}(h **Return**h]j)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjjubjM)}(hThe original value of **v**.h](hThe original value of }(hjkhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_xchg (C function) c.atomic_xchghNtauh1hhjhhhNhNubh)}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj lhhhjlhMQubh)}(h atomic_xchgh]j)}(h atomic_xchgh]h atomic_xchg}(hj0lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,lubah}(h]h ](jjeh"]h$]h&]jjuh1hhj lhhhjlhMQubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjOlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLlubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQlmodnameN classnameNjwjz)}j}]j)}jsj2lsb c.atomic_xchgasbuh1hhjHlubjQ)}(h h]h }(hjolhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHlubj)}(hjh]h*}(hj}lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHlubj)}(hjh]hv}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDlubj:)}(hint newh](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hnewh]hnew}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDlubeh}(h]h ]h"]h$]h&]jjuh1j3hj lhhhjlhMQubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlhhhjlhMQubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlhMQhjlhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjlhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjlhMQubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjmjHjmjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj mh]h Parameters}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjmubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj)mh]h atomic_t *v}(hj+mhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'mubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhj#mubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjBmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>mhMRhj?mubah}(h]h ]h"]h$]h&]uh1jhj#mubeh}(h]h ]h"]h$]h&]uh1jhj>mhMRhj mubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjbmh]hint new}(hjdmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`mubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj\mubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj{mhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwmhMShjxmubah}(h]h ]h"]h$]h&]uh1jhj\mubeh}(h]h ]h"]h$]h&]uh1jhjwmhMShj mubeh}(h]h ]h"]h$]h&]uh1jhjmubjM)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjmubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh to }(hjmhhhNhNubj)}(h**new**h]hnew}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh with full ordering.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjmubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjmubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjmubjM)}(hThe original value of **v**.h](hThe original value of }(hj nhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj nubh.}(hj nhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_xchg_acquire (C function)c.atomic_xchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hjNnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdubjQ)}(h h]h }(hj]nhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJnhhhj\nhMdubh)}(hatomic_xchg_acquireh]j)}(hatomic_xchg_acquireh]hatomic_xchg_acquire}(hjonhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjknubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJnhhhj\nhMdubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsjqnsbc.atomic_xchg_acquireasbuh1hhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(hint newh](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hnewh]hnew}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hjJnhhhj\nhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFnhhhj\nhMdubah}(h]jAnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\nhMdhjCnhhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hj'ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhj$ohhubah}(h]h ]h"]h$]h&]uh1j3hjCnhhhj\nhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?ojHj?ojIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjIoh]h Parameters}(hjKohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjCoubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjhoh]h atomic_t *v}(hjjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjboubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}ohMehj~oubah}(h]h ]h"]h$]h&]uh1jhjboubeh}(h]h ]h"]h$]h&]uh1jhj}ohMehj_oubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjoh]hint new}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjoubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMfhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMfhj_oubeh}(h]h ]h"]h$]h&]uh1jhjCoubjM)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjCoubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh to }(hjohhhNhNubj)}(h**new**h]hnew}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh with acquire ordering.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjCoubjM)}(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.}(hj%phhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjCoubjM)}(h **Return**h]j)}(hj6ph]hReturn}(hj8phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4pubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjCoubjM)}(hThe original value of **v**.h](hThe original value of }(hjLphhhNhNubj)}(h**v**h]hv}(hjTphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLpubh.}(hjLphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjCoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_xchg_release (C function)c.atomic_xchg_releasehNtauh1hhjhhhNhNubh)}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjphMvubh)}(hatomic_xchg_releaseh]j)}(hatomic_xchg_releaseh]hatomic_xchg_release}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjphMvubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjpsbc.atomic_xchg_releaseasbuh1hhjpubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]hv}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubj:)}(hint newh](j)}(hinth]hint}(hj qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hj.qhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hnewh]hnew}(hjUnsafe to use in noinstr code; use raw_atomic_cmpxchg() there.h]h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5vubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5vubjM)}(hThe original value of **v**.h](hThe original value of }(hjwhhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_cmpxchg_acquire (C function)c.atomic_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjwhMubh)}(hatomic_cmpxchg_acquireh]j)}(hatomic_cmpxchg_acquireh]hatomic_cmpxchg_acquire}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj xubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjwhMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj.xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0xmodnameN classnameNjwjz)}j}]j)}jsjxsbc.atomic_cmpxchg_acquireasbuh1hhj'xubjQ)}(h h]h }(hjNxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'xubj)}(hjh]h*}(hj\xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'xubj)}(hjh]hv}(hjixhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#xubj:)}(hint oldh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}xubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}xubj)}(holdh]hold}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#xubj:)}(hint newh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hnewh]hnew}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#xubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjwhMubah}(h]jwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhjwhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjyh]h Parameters}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj=yh]h atomic_t *v}(hj?yhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;yubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7yubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjVyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRyhMhjSyubah}(h]h ]h"]h$]h&]uh1jhj7yubeh}(h]h ]h"]h$]h&]uh1jhjRyhMhj4yubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjvyh]hint old}(hjxyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpyubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjpyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj4yubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjyh]hint new}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj4yubeh}(h]h ]h"]h$]h&]uh1jhjyubjM)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh == }(hjzhhhNhNubj)}(h**old**h]hold}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh), atomically updates }(hjzhhhNhNubj)}(h**v**h]hv}(hj,zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh to }(hjzhhhNhNubj)}(h**new**h]hnew}(hj>zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh# with acquire ordering. Otherwise, }(hjzhhhNhNubj)}(h**v**h]hv}(hjPzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh2 is not modified and relaxed ordering is provided.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubjM)}(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.}(hjizhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubjM)}(h **Return**h]j)}(hjzzh]hReturn}(hj|zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubjM)}(hThe original value of **v**.h](hThe original value of }(hjzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_cmpxchg_release (C function)c.atomic_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhMubh)}(hatomic_cmpxchg_releaseh]j)}(hatomic_cmpxchg_releaseh]hatomic_cmpxchg_release}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzhhhjzhMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j)}jsjzsbc.atomic_cmpxchg_releaseasbuh1hhj {ubjQ)}(h h]h }(hj1{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj {ubj)}(hjh]h*}(hj?{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubj)}(hjh]hv}(hjL{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(hint oldh](j)}(hinth]hint}(hjd{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`{ubjQ)}(h h]h }(hjr{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`{ubj)}(holdh]hold}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(hint newh](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hnewh]hnew}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubeh}(h]h ]h"]h$]h&]jjuh1j3hjzhhhjzhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjzhMubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjzhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj |h]h atomic_t *v}(hj"|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj9|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5|hMhj6|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj5|hMhj|ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjY|h]hint old}(hj[|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW|ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjS|ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjr|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjn|hMhjo|ubah}(h]h ]h"]h$]h&]uh1jhjS|ubeh}(h]h ]h"]h$]h&]uh1jhjn|hMhj|ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hj|h]hint new}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|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]jM)}(hint value to assignh]hint value to assign}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj{ubjM)}(h**Description**h]j)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj|hhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh == }(hj|hhhNhNubj)}(h**old**h]hold}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh), atomically updates }(hj|hhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh to }(hj|hhhNhNubj)}(h**new**h]hnew}(hj!}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh# with release ordering. Otherwise, }(hj|hhhNhNubj)}(h**v**h]hv}(hj3}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh2 is not modified and relaxed ordering is provided.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubjM)}(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.}(hjL}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubjM)}(h **Return**h]j)}(hj]}h]hReturn}(hj_}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubjM)}(hThe original value of **v**.h](hThe original value of }(hjs}hhhNhNubj)}(h**v**h]hv}(hj{}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs}ubh.}(hjs}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_cmpxchg_relaxed (C function)c.atomic_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj}hMubh)}(hatomic_cmpxchg_relaxedh]j)}(hatomic_cmpxchg_relaxedh]hatomic_cmpxchg_relaxed}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhj}hMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsj}sbc.atomic_cmpxchg_relaxedasbuh1hhj}ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hj"~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]hv}(hj/~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubj:)}(hint oldh](j)}(hinth]hint}(hjG~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC~ubjQ)}(h h]h }(hjU~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjC~ubj)}(holdh]hold}(hjc~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubj:)}(hint newh](j)}(hinth]hint}(hj|~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx~ubj)}(hnewh]hnew}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubeh}(h]h ]h"]h$]h&]jjuh1j3hj}hhhj}hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhj}hMubah}(h]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj}hMhj}hhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhj}hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~jHj~jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hj<h]hint old}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj~ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjuh]hint new}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubjM)}(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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubjM)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubjM)}(hThe original value of **v**.h](hThe original value of }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_try_cmpxchg (C function)c.atomic_try_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool atomic_try_cmpxchg (atomic_t *v, int *old, int new)h]h)}(h7bool atomic_try_cmpxchg(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_try_cmpxchgh]j)}(hatomic_try_cmpxchgh]hatomic_try_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjրhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӀubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj؀modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchgasbuh1hhjπubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjπubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjπubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjπubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjˀubj:)}(hint *oldh](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(holdh]hold}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjˀubj:)}(hint newh](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjˀubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjɁjHjɁjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjӁh]h Parameters}(hjՁhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjсubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hj+h]hint *old}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)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]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjdh]hint new}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjubeh}(h]h ]h"]h$]h&]uh1jhj́ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj́ubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjςhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj́ubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj́ubjM)}(h **Return**h]j)}(hjSh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj́ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh if the exchange occurred, }(hjihhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh otherwise.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj́ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_acquire (C function)c.atomic_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_acquire (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjƃhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjŃhMubh)}(hatomic_try_cmpxchg_acquireh]j)}(hatomic_try_cmpxchg_acquireh]hatomic_try_cmpxchg_acquire}(hj؃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԃubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjŃhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjڃsbc.atomic_try_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(holdh]hold}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjŃhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjŃhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjŃhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj҄hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjτhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjŃhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjLh]hint *old}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjFubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjbubah}(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]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj…hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjօhhhNhNubj)}(h**v**h]hv}(hjޅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh == }(hjօhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh), atomically updates }(hjօhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh to }(hjօhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh# with acquire ordering. Otherwise, }(hjօhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh is not modified, }(hjօhhhNhNubj)}(h**old**h]hold}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh$ is updated to the current value of }(hjօhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjօubh#, and relaxed ordering is provided.}(hjօhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_release (C function)c.atomic_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjنhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՆhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjՆhhhjhMubh)}(hatomic_try_cmpxchg_releaseh]j)}(hatomic_try_cmpxchg_releaseh]hatomic_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjՆhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint *oldh](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjɇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjՆhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjцhhhjhMubah}(h]j̆ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjΆhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjΆhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h,](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj4h]h atomic_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjmh]hint *old}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߈ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_relaxed (C function)c.atomic_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM1ubh)}(hatomic_try_cmpxchg_relaxedh]j)}(hatomic_try_cmpxchg_relaxedh]hatomic_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM1ubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchg_relaxedasbuh1hhj2ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(hint newh](j)}(hinth]hint}(hjΊhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʊubjQ)}(h h]h }(hj܊hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjʊubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʊubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM1ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM1hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj0ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjUh]h atomic_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjOubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhM2hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM2hjLubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjLubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjNjh]hint new}(hjɋhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjŋubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj܋hM4hj݋ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj܋hM4hjLubeh}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj0ubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj0ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj0ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj0ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjЌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhǰubh if the exchange occurred, }(hǰhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhǰubh otherwise.}(hǰhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_sub_and_test (C function)c.atomic_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool atomic_sub_and_test (int i, atomic_t *v)h]h)}(h,bool atomic_sub_and_test(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj(hMGubh)}(hatomic_sub_and_testh]j)}(hatomic_sub_and_testh]hatomic_sub_and_test}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj(hMGubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]hi}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj=sbc.atomic_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjɍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj(hMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj(hMGubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMGhjhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj(hMGubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj3h]hint i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhj-ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMHhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMHhj*ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjlh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjfubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjŎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj׎hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh if the resulting value of }(hj)hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh is zero, }(hj)hhhNhNubj)}(h **false**h]hfalse}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh otherwise.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_dec_and_test (C function)c.atomic_dec_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool atomic_dec_and_test (atomic_t *v)h]h)}(h%bool atomic_dec_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMZubh)}(hatomic_dec_and_testh]j)}(hatomic_dec_and_testh]hatomic_dec_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMZubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjɏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƏubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjˏmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMZubah}(h]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMZhjhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhj*hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjIubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjnh]h atomic_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjhubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjeubah}(h]h ]h"]h$]h&]uh1jhjIubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjIubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjǐhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjِhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjIubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjIubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjIubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_inc_and_test (C function)c.atomic_inc_and_testhNtauh1hhjhhhNhNubh)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjhMlubh)}(hatomic_inc_and_testh]j)}(hatomic_inc_and_testh]hatomic_inc_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjhMlubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjّhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjhMlubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMlhjohhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjhhubah}(h]h ]h"]h$]h&]uh1j3hjohhhjhMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj9ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj^h]h atomic_t *v}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjXubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMmhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMmhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj9ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjɒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj9ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj9ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj9ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh if the resulting value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is zero, }(hj hhhNhNubj)}(h **false**h]hfalse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_add_negative (C function)c.atomic_add_negativehNtauh1hhjhhhNhNubh)}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfhhhjwhM~ubh)}(hatomic_add_negativeh]j)}(hatomic_add_negativeh]hatomic_add_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfhhhjwhM~ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj“hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjݓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjړubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjߓmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_add_negativeasbuh1hhj֓ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj֓ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֓ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֓ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjfhhhjwhM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbhhhjwhM~ubah}(h]j]ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhM~hj_hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hj>hhubah}(h]h ]h"]h$]h&]uh1j3hj_hhhjwhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjԔhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjДhMhjєubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjДhMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**i**h]hi}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(h **Return**h]j)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh if the resulting value of }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh is negative, }(hjxhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh otherwise.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_acquire (C function)c.atomic_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hjٕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՕhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjՕhhhjhMubh)}(hatomic_add_negative_acquireh]j)}(hatomic_add_negative_acquireh]hatomic_add_negative_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjՕhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_add_negative_acquireasbuh1hhjEubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjՕhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjѕhhhjhMubah}(h]j̕ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjΕhhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjΕhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjȖjHjȖjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjҖh]h Parameters}(hjԖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЖubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj*h]h atomic_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubeh}(h]h ]h"]h$]h&]uh1jhj̖ubjM)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̖ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh to (}(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh + }(hj{hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh) with acquire ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̖ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̖ubjM)}(h **Return**h]j)}(hjїh]hReturn}(hjӗhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϗubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̖ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̖ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_release (C function)c.atomic_add_negative_releasehNtauh1hhjhhhNhNubh)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjUhMubh)}(hatomic_add_negative_releaseh]j)}(hatomic_add_negative_releaseh]hatomic_add_negative_release}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjUhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjjsbc.atomic_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjۘhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjUhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhjUhMubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMhj=hhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhjUhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7jHj7jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj`h]hint i}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubjM)}(h**Description**h]j)}(hjԙh]h Description}(hj֙hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҙubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubjM)}(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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubjM)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh if the resulting value of }(hjVhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh is negative, }(hjVhhhNhNubj)}(h **false**h]hfalse}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh otherwise.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_relaxed (C function)c.atomic_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjŚhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjĚhMubh)}(hatomic_add_negative_relaxedh]j)}(hatomic_add_negative_relaxedh]hatomic_add_negative_relaxed}(hjךhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӚubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjĚhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}jsjٚsbc.atomic_add_negative_relaxedasbuh1hhj#ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjĚhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjĚhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjĚhMhjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjĚhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjϛh]hint i}(hjћhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj͛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]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƛubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjYhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh to (}(hjYhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh + }(hjYhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh) with relaxed ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjɜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŜubh if the resulting value of }(hjŜhhhNhNubj)}(h**v**h]hv}(hjۜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŜubh is negative, }(hjŜhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŜubh otherwise.}(hjŜhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_fetch_add_unless (C function)c.atomic_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"hhhj4hMubh)}(hatomic_fetch_add_unlessh]j)}(hatomic_fetch_add_unlessh]hatomic_fetch_add_unless}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"hhhj4hMubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]j)}jsjIsbc.atomic_fetch_add_unlessasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjǝhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hah]ha}(hj՝hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjlh]hu}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hj"hhhj4hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj4hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj4hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjth]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjƞhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjžhMhjÞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjžhMhjkubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj7hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh != }(hj7hhhNhNubj)}(h**u**h]hu}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh), atomically updates }(hj7hhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh to (}(hj7hhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh + }(hj7hhhNhNubj)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh!) with full ordering. Otherwise, }(hj7hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh2 is not modified and relaxed ordering is provided.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(h **Return**h]j)}(hjßh]hReturn}(hjşhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(hThe original value of **v**.h](hThe original value of }(hjٟhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٟubh.}(hjٟhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_add_unless (C function)c.atomic_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hMubh)}(hatomic_add_unlessh]j)}(hatomic_add_unlessh]hatomic_add_unless}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hMubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j)}jsj<sbc.atomic_add_unlessasbuh1hhjRubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjםh]ha}(hjȠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܠubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܠubj)}(hjlh]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܠubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj'hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj'hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjfh]h atomic_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj]ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjءh]hint u}(hjڡhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj֡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]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҡubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj)hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh != }(hj)hhhNhNubj)}(h**u**h]hu}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh), atomically updates }(hj)hhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh to (}(hj)hhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh + }(hj)hhhNhNubj)}(h**a**h]ha}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh!) with full ordering. Otherwise, }(hj)hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh2 is not modified and relaxed ordering is provided.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(hAUnsafe to use in noinstr code; use raw_atomic_add_unless() there.h]hAUnsafe to use in noinstr code; use raw_atomic_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjϢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˢubh if }(hjˢhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˢubh was updated, }(hjˢhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˢubh otherwise.}(hjˢhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_inc_not_zero (C function)c.atomic_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj9hMubh)}(hatomic_inc_not_zeroh]j)}(hatomic_inc_not_zeroh]hatomic_inc_not_zero}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj9hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsjNsbc.atomic_inc_not_zeroasbuh1hhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj9hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhj9hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMhj!hhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjϣhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj̣hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj9hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjahhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh != 0), atomically updates }(hjahhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh to (}(hjahhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh% + 1) with full ordering. Otherwise, }(hjahhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh2 is not modified and relaxed ordering is provided.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.h]hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjɤh]hReturn}(hjˤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǤubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߤubh if }(hjߤhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߤubh was updated, }(hjߤhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߤubh otherwise.}(hjߤhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_inc_unless_negative (C function)c.atomic_inc_unless_negativehNtauh1hhjhhhNhNubh)}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhjMhMubh)}(hatomic_inc_unless_negativeh]j)}(hatomic_inc_unless_negativeh]hatomic_inc_unless_negative}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhjMhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjbsbc.atomic_inc_unless_negativeasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubah}(h]h ]h"]h$]h&]jjuh1j3hj<hhhjMhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhjMhMubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMhj5hhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhjMhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj$h]h atomic_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjuhhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh >= 0), atomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to (}(hjuhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh% + 1) with full ordering. Otherwise, }(hjuhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh2 is not modified and relaxed ordering is provided.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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̦hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjݦh]hReturn}(hjߦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۦubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_dec_unless_positive (C function)c.atomic_dec_unless_positivehNtauh1hhjhhhNhNubh)}(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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjahMubh)}(hatomic_dec_unless_positiveh]j)}(hatomic_dec_unless_positiveh]hatomic_dec_unless_positive}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjahMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjvsbc.atomic_dec_unless_positiveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjΧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjahMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjahMubah}(h]jGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahMhjIhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjahMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj8h]h atomic_t *v}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh <= 0), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjǨhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_dec_if_positive (C function)c.atomic_dec_if_positivehNtauh1hhjhhhNhNubh)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjvhM+ubh)}(hatomic_dec_if_positiveh]j)}(hatomic_dec_if_positiveh]hatomic_dec_if_positive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjvhM+ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hjȩhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj֩hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjvhM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhjvhM+ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhM+hj]hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hj hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjvhM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj(ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjMh]h atomic_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjGubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM,hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM,hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj(ubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh > 0), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjʪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjܪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hj(ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj(ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj(ubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_read (C function)c.atomic64_readhNtauh1hhjhhhNhNubh)}(hhh](h)}(h's64 atomic64_read (const atomic64_t *v)h]h)}(h&s64 atomic64_read(const atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}js atomic64_readsbc.atomic64_readasbuh1hhjkhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkhhhjhM>ubh)}(h atomic64_readh]j)}(hjh]h atomic64_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjkhhhjhM>ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjΫhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj߫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܫubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjkhhhjhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhjhM>ubah}(h]jbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM>hjdhhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hj>hhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj]ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjh]hconst atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj]ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjӬhhhNhNubj)}(h**v**h]hv}(hj۬hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӬubh with relaxed ordering.}(hjӬhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj]ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj]ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj]ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_read_acquire (C function)c.atomic64_read_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsatomic64_read_acquiresbc.atomic64_read_acquireasbuh1hhjXhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjhMOubh)}(hatomic64_read_acquireh]j)}(hj}h]hatomic64_read_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjhMOubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj̭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɭubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjέmodnameN classnameNjwjz)}j}]j{c.atomic64_read_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjThhhjhMOubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMOhjQhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+hhubah}(h]h ]h"]h$]h&]uh1j3hjQhhhjhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFjHjFjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjJubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjoh]hconst atomic64_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjiubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjfubah}(h]h ]h"]h$]h&]uh1jhjJubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjJubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjȮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjJubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjJubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjJubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_set (C function)c.atomic64_sethNtauh1hhjhhhNhNubh)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjWhM`ubh)}(h atomic64_seth]j)}(h atomic64_seth]h atomic64_set}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjWhM`ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjlsbc.atomic64_setasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjįhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj߯hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܯubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_setasbuh1hhjدubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjدubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjدubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubeh}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjWhM`ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjWhM`ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhM`hj>hhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj1hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjWhM`ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjPubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjuh]h atomic64_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMahjlubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjǰhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjðhMbhjİubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjðhMbhjlubeh}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjPubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjPubjM)}(hhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh to }(hj>hhhNhNubj)}(h**i**h]hi}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh with release ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjubjM)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_add (C function)c.atomic64_addhNtauh1hhjhhhNhNubh)}(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}(hjdzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjóhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjֳhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjóhhhjճhMubh)}(h atomic64_addh]j)}(h atomic64_addh]h atomic64_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjóhhhjճhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_addasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j#c.atomic64_addasbuh1hhjIubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjóhhhjճhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjճhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjճhMhjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjճhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjʴjHjʴjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjԴh]h Parameters}(hjִhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҴubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj,h]h atomic64_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubeh}(h]h ]h"]h$]h&]uh1jhjδubjM)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjδubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh to (}(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh + }(hj}hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh) with relaxed ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjδubjM)}(hubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]hi}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj/h]hs64 i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-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]jM)}(hs64 value to addh]hs64 value to add}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjhh]h atomic64_t *v}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj%hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_add_acquire (C function)c.atomic64_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_add_acquiresbc.atomic64_fetch_add_acquireasbuh1hhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjhMubh)}(hatomic64_fetch_add_acquireh]j)}(hjh]hatomic64_fetch_add_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_add_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_add_acquireasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjhMubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj[hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjahhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh to (}(hj/hhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh + }(hj/hhhNhNubj)}(h**i**h]hi}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh) with acquire ordering.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_add_release (C function)c.atomic64_fetch_add_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_add_releasesbc.atomic64_fetch_add_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_add_releaseh]j)}(hjh]hatomic64_fetch_add_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]jc.atomic64_fetch_add_releaseasbuh1hhj*ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]hi}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_add_releaseasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjTh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_add_relaxed (C function)c.atomic64_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_add_relaxedsbc.atomic64_fetch_add_relaxedasbuh1hhjNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhjvhMubh)}(hatomic64_fetch_add_relaxedh]j)}(hjsh]hatomic64_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjNhhhjvhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jqc.atomic64_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jqc.atomic64_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjNhhhjvhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJhhhjvhMubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhMhjGhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjGhhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubjM)}(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`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubjM)}(h **Return**h]j)}(hjqh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_sub (C function)c.atomic64_subhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM+ubh)}(h atomic64_subh]j)}(h atomic64_subh]h atomic64_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM+ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_subasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j$c.atomic64_subasbuh1hhjJubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM+ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM+hjhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hj-h]h atomic64_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM-hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM-hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to (}(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh - }(hj~hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh) with relaxed ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubjM)}(hhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj=hM=ubh)}(hatomic64_sub_returnh]j)}(hj:h]hatomic64_sub_return}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj=hM=ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j8c.atomic64_sub_returnasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j8c.atomic64_sub_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj=hM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj=hM=ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hM=hjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj=hM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj3ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjXh]hs64 i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjRubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM>hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM>hjOubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj3ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj3ubjM)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj3ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj3ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjNhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_acquire (C function)c.atomic64_sub_return_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_acquiresbc.atomic64_sub_return_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMPubh)}(hatomic64_sub_return_acquireh]j)}(hjh]hatomic64_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMPubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]jc.atomic64_sub_return_acquireasbuh1hhj$ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMPubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMPhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMPubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(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]jS)}(hjh]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh - }(hjXhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with acquire ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_release (C function)c.atomic64_sub_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_releasesbc.atomic64_sub_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj)hMbubh)}(hatomic64_sub_return_releaseh]j)}(hj&h]hatomic64_sub_return_release}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj)hMbubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j$c.atomic64_sub_return_releaseasbuh1hhjSubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j$c.atomic64_sub_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj)hMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj)hMbubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMbhjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj)hMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjDh]hs64 i}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj>ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMchjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMchj;ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj}h]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjwubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMdhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj:hhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_relaxed (C function)c.atomic64_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_relaxedsbc.atomic64_sub_return_relaxedasbuh1hhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhMuubh)}(hatomic64_sub_return_relaxedh]j)}(hjh]hatomic64_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjhMuubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhMuubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjphhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to (}(hjDhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh - }(hjDhhhNhNubj)}(h**i**h]hi}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh) with relaxed ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_sub (C function)c.atomic64_fetch_subhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_subsbc.atomic64_fetch_subasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_subh]j)}(hjh]hatomic64_fetch_sub}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_subasbuh1hhj?ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]hi}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj0h]hs64 i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.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]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjih]h atomic64_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjcubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj&hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_sub_acquire (C function)c.atomic64_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_acquiresbc.atomic64_fetch_sub_acquireasbuh1hhjchhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjhMubh)}(hatomic64_fetch_sub_acquireh]j)}(hjh]hatomic64_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjhMubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj\hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh - }(hj0hhhNhNubj)}(h**i**h]hi}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh) with acquire ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_sub_release (C function)c.atomic64_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_releasesbc.atomic64_fetch_sub_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_sub_releaseh]j)}(hjh]hatomic64_fetch_sub_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhj+ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]hi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjUh]h atomic64_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_sub_relaxed (C function)c.atomic64_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_relaxedsbc.atomic64_fetch_sub_relaxedasbuh1hhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjwhMubh)}(hatomic64_fetch_sub_relaxedh]j)}(hjth]hatomic64_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjwhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jrc.atomic64_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jrc.atomic64_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjwhMubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhjHhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjmubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_inc (C function)c.atomic64_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void atomic64_inc (atomic64_t *v)h]h)}(h void atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic64_inch]j)}(h atomic64_inch]h atomic64_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_incasbuh1hhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_inc_return_release (C function)c.atomic64_inc_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_releasesbc.atomic64_inc_return_releaseasbuh1hhjLhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhjthMubh)}(hatomic64_inc_return_releaseh]j)}(hjqh]hatomic64_inc_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhjthMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]joc.atomic64_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjLhhhjthMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhjthMubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthMhjEhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhjthMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjHh]h atomic64_t *v}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_inc_return_relaxed (C function)c.atomic64_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_relaxedsbc.atomic64_inc_return_relaxedasbuh1hhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjXhMubh)}(hatomic64_inc_return_relaxedh]j)}(hjUh]hatomic64_inc_return_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjXhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jSc.atomic64_inc_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjXhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjXhMubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhMhj)hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjXhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj,h]h atomic64_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh to (}(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh + 1) with relaxed ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_inc (C function)c.atomic64_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_inc (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_inc(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_incsbc.atomic64_fetch_incasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj<hM(ubh)}(hatomic64_fetch_inch]j)}(hj9h]hatomic64_fetch_inc}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj<hM(ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j7c.atomic64_fetch_incasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj<hM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj<hM(ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<hM(hj hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj<hM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hM)hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM)hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjahhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh to (}(hjahhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh + 1) with full ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_acquire (C function)c.atomic64_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_acquiresbc.atomic64_fetch_inc_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM:ubh)}(hatomic64_fetch_inc_acquireh]j)}(hjh]hatomic64_fetch_inc_acquire}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM:ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_acquireasbuh1hhjJubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hM:ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hM:ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM:hjhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM:ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM;hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM;hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjEhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh to (}(hjEhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh + 1) with acquire ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubjM)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_release (C function)c.atomic64_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_releasesbc.atomic64_fetch_inc_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMKubh)}(hatomic64_fetch_inc_releaseh]j)}(hjh]hatomic64_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMKubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_releaseasbuh1hhj.ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMKhjhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj)hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh to (}(hj)hhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh + 1) with release ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubjM)}(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\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_relaxed (C function)c.atomic64_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_relaxedsbc.atomic64_fetch_inc_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM]ubh)}(hatomic64_fetch_inc_relaxedh]j)}(hjh]hatomic64_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM]ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM]ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM]ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM]hjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjxhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + 1) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubjM)}(hThe original value of **v**.h](hThe original value of }(hjghhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_dec (C function)c.atomic64_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void atomic64_dec (atomic64_t *v)h]h)}(h void atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMnubh)}(h atomic64_dech]j)}(h atomic64_dech]h atomic64_dec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMnubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_decasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMnubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMnubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMnhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjIhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjhubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjhubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjhubjM)}(hubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj_h]h atomic64_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjYubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_acquire (C function)c.atomic64_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_acquire (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_acquire(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_acquiresbc.atomic64_dec_return_acquireasbuh1hhjGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjohMubh)}(hatomic64_dec_return_acquireh]j)}(hjlh]hatomic64_dec_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjohMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jjc.atomic64_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjohMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjohMubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjohMhj@hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjohMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjCh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_release (C function)c.atomic64_dec_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_releasesbc.atomic64_dec_return_releaseasbuh1hhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhjShMubh)}(hatomic64_dec_return_releaseh]j)}(hjPh]hatomic64_dec_return_release}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhjShMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jNc.atomic64_dec_return_releaseasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhjShMubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhj$hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj'h]h atomic64_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh - 1) with release ordering.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_relaxed (C function)c.atomic64_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_relaxedsbc.atomic64_dec_return_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj7hMubh)}(hatomic64_dec_return_relaxedh]j)}(hj4h]hatomic64_dec_return_relaxed}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj7hMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjmodnameN classnameNjwjz)}j}]j2c.atomic64_dec_return_relaxedasbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj7hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj7hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj\hhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh to (}(hj\hhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh - 1) with relaxed ordering.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_dec (C function)c.atomic64_fetch_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_dec (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_dec(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_decsbc.atomic64_fetch_decasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dech]j)}(hjh]hatomic64_fetch_dec}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_decasbuh1hhjEubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh - 1) with full ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_acquire (C function)c.atomic64_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_acquiresbc.atomic64_fetch_dec_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_acquireh]j)}(hjh]hatomic64_fetch_dec_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_acquireasbuh1hhj)ubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]hv}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh - 1) with acquire ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjhh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_release (C function)c.atomic64_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_releasesbc.atomic64_fetch_dec_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_releaseh]j)}(hjh]hatomic64_fetch_dec_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_releaseasbuh1hhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjshhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_relaxed (C function)c.atomic64_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_relaxedsbc.atomic64_fetch_dec_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_relaxedh]j)}(hjh]hatomic64_fetch_dec_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubjM)}(hThe original value of **v**.h](hThe original value of }(hjFhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_and (C function)c.atomic64_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void atomic64_and (s64 i, atomic64_t *v)h]h)}(h'void atomic64_and(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(h atomic64_andh]j)}(h atomic64_andh]h atomic64_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_andasbuh1hhj ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hj|hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjohhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh & }(hj=hhhNhNubj)}(h**i**h]hi}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj: ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hj6 ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQ hMD hjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hMD hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjw h]h Description}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hj ubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh & }(hj hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hj ubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_release() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_and_relaxed (C function)c.atomic64_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_and_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_and_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj? modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_and_relaxedsbc.atomic64_fetch_and_relaxedasbuh1hhj6 hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubjQ)}(h h]h }(hj_ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6 hhhj^ hMU ubh)}(hatomic64_fetch_and_relaxedh]j)}(hj[ h]hatomic64_fetch_and_relaxed}(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6 hhhj^ hMU ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jY c.atomic64_fetch_and_relaxedasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jY c.atomic64_fetch_and_relaxedasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj6 hhhj^ hMU ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2 hhhj^ hMU ubah}(h]j- ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^ hMU hj/ hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hj5 hhubah}(h]h ]h"]h$]h&]uh1j3hj/ hhhj^ hMU ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjP jHjP jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjZ h]h Parameters}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjT ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjy h]hs64 i}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjw ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjs ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMV hj ubah}(h]h ]h"]h$]h&]uh1jhjs ubeh}(h]h ]h"]h$]h&]uh1jhj hMV hjp ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hj ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMW hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMW hjp ubeh}(h]h ]h"]h$]h&]uh1jhjT ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjT ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh & }(hj hhhNhNubj)}(h**i**h]hi}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjT ubjM)}(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.}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjT ubjM)}(h **Return**h]j)}(hjY h]hReturn}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hjT ubjM)}(hThe original value of **v**.h](hThe original value of }(hjo hhhNhNubj)}(h**v**h]hv}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo ubh.}(hjo hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjT ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_andnot (C function)c.atomic64_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void atomic64_andnot (s64 i, atomic64_t *v)h]h)}(h*void atomic64_andnot(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMg ubh)}(hatomic64_andnoth]j)}(hatomic64_andnoth]hatomic64_andnot}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMg ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic64_andnotasbuh1hhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j c.atomic64_andnotasbuh1hhj2ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMg ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMg ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMg hj hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMg ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMh hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMi hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMi hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjfhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh to (}(hjfhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh & }(hjfhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh) with relaxed ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_fetch_andnot (C function)c.atomic64_fetch_andnothNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnotsbc.atomic64_fetch_andnotasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hMy ubh)}(hatomic64_fetch_andnoth]j)}(hj"h]hatomic64_fetch_andnot}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj%hMy ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j c.atomic64_fetch_andnotasbuh1hhjOubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.atomic64_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj%hMy ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj%hMy ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hMy hjhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj%hMy ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj@h]hs64 i}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>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]jM)}(h s64 valueh]h s64 value}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMz hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMz hj7ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjyh]h atomic64_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjsubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM{ hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM{ hj7ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_fetch_andnot_acquire (C function)c.atomic64_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_acquiresbc.atomic64_fetch_andnot_acquireasbuh1hhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjhM ubh)}(hatomic64_fetch_andnot_acquireh]j)}(hjh]hatomic64_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_andnot_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_andnot_acquireasbuh1hhj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjshhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjhM ubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjlhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjrhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh & }(hj@hhhNhNubj)}(h**~i**h]h~i}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh) with acquire ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_fetch_andnot_release (C function)c.atomic64_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_releasesbc.atomic64_fetch_andnot_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_fetch_andnot_releaseh]j)}(hjh]hatomic64_fetch_andnot_release}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j c.atomic64_fetch_andnot_releaseasbuh1hhj;ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]hi}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.atomic64_fetch_andnot_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj,h]hs64 i}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*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]jM)}(h s64 valueh]h s64 value}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhM hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM hj#ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjeh]h atomic64_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhM hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj"hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_fetch_andnot_relaxed (C function)c.atomic64_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_relaxedsbc.atomic64_fetch_andnot_relaxedasbuh1hhj_hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjhM ubh)}(hatomic64_fetch_andnot_relaxedh]j)}(hjh]hatomic64_fetch_andnot_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_andnot_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_andnot_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjhM ubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjXhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^hhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj,hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh & }(hj,hhhNhNubj)}(h**~i**h]h~i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh) with relaxed ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubjM)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_or (C function) c.atomic64_orhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(h atomic64_orh]j)}(h atomic64_orh]h atomic64_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic64_orasbuh1hhjubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j5 c.atomic64_orasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hj>h]h atomic64_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_or (C function)c.atomic64_fetch_orhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_orsbc.atomic64_fetch_orasbuh1hhj&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhjNhM ubh)}(hatomic64_fetch_orh]j)}(hjKh]hatomic64_fetch_or}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhhjNhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jIc.atomic64_fetch_orasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jIc.atomic64_fetch_orasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hj&hhhjNhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"hhhjNhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNhM hjhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj%hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjNhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjih]hs64 i}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hM hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj`ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubjM)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubjM)}(hThe original value of **v**.h](hThe original value of }(hj_hhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_or_acquire (C function)c.atomic64_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_acquiresbc.atomic64_fetch_or_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_fetch_or_acquireh]j)}(hjh]hatomic64_fetch_or_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_or_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]jc.atomic64_fetch_or_acquireasbuh1hhj5ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj- hM hj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjS h]h Description}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hji hhhNhNubj)}(h**v**h]hv}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubh to (}(hji hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubh | }(hji hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubh) with acquire ordering.}(hji hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_acquire() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_or_release (C function)c.atomic64_fetch_or_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_releasesbc.atomic64_fetch_or_releaseasbuh1hhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj;!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj:!hM ubh)}(hatomic64_fetch_or_releaseh]j)}(hj7!h]hatomic64_fetch_or_release}(hjM!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj:!hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjk!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjm!modnameN classnameNjwjz)}j}]j5!c.atomic64_fetch_or_releaseasbuh1hhjd!ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjd!ubj)}(hjh]hi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`!ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]j5!c.atomic64_fetch_or_releaseasbuh1hhj!ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]hv}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`!ubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj:!hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj:!hM ubah}(h]j !ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:!hM hj !hhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"hhubah}(h]h ]h"]h$]h&]uh1j3hj !hhhj:!hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,"jHj,"jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj6"h]h Parameters}(hj8"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjU"h]hs64 i}(hjW"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjO"ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjn"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjj"hM hjk"ubah}(h]h ]h"]h$]h&]uh1jhjO"ubeh}(h]h ]h"]h$]h&]uh1jhjj"hM hjL"ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj"h]h atomic64_t *v}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjL"ubeh}(h]h ]h"]h$]h&]uh1jhj0"ubjM)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh to (}(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh | }(hj"hhhNhNubj)}(h**i**h]hi}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) with release ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.}(hj$#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubjM)}(h **Return**h]j)}(hj5#h]hReturn}(hj7#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3#ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubjM)}(hThe original value of **v**.h](hThe original value of }(hjK#hhhNhNubj)}(h**v**h]hv}(hjS#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK#ubh.}(hjK#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_or_relaxed (C function)c.atomic64_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_relaxedsbc.atomic64_fetch_or_relaxedasbuh1hhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hM ubh)}(hatomic64_fetch_or_relaxedh]j)}(hj#h]hatomic64_fetch_or_relaxed}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j#c.atomic64_fetch_or_relaxedasbuh1hhj#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]hi}(hj $hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj($hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*$modnameN classnameNjwjz)}j}]j#c.atomic64_fetch_or_relaxedasbuh1hhj!$ubjQ)}(h h]h }(hjF$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!$ubj)}(hjh]h*}(hjT$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!$ubj)}(hjh]hv}(hja$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj#hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj#hM ubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hM hj#hhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj$h]hs64 i}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$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]jM)}(h s64 valueh]h s64 value}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$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]jS)}(hj%h]h atomic64_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%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$ubjM)}(h**Description**h]j)}(hj?%h]h Description}(hjA%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjU%hhhNhNubj)}(h**v**h]hv}(hj]%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU%ubh to (}(hjU%hhhNhNubj)}(h**v**h]hv}(hjo%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU%ubh | }(hjU%hhhNhNubj)}(h**i**h]hi}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU%ubh) with relaxed ordering.}(hjU%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubjM)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubjM)}(hThe original value of **v**.h](hThe original value of }(hj%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_xor (C function)c.atomic64_xorhNtauh1hhjhhhNhNubh)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj&hM ubh)}(h atomic64_xorh]j)}(h atomic64_xorh]h atomic64_xor}(hj#&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj&hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjB&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD&modnameN classnameNjwjz)}j}]j)}jsj%&sbc.atomic64_xorasbuh1hhj;&ubjQ)}(h h]h }(hjb&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;&ubj)}(hjh]hi}(hjp&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7&ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j^&c.atomic64_xorasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hjh]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7&ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj&hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj&hM ubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hM hj%hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj&hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 'ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj.'h]hs64 i}(hj0'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,'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]jM)}(h s64 valueh]h s64 value}(hjG'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjC'hM hjD'ubah}(h]h ]h"]h$]h&]uh1jhj('ubeh}(h]h ]h"]h$]h&]uh1jhjC'hM hj%'ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjg'h]h atomic64_t *v}(hji'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hja'ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|'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 'ubjM)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hj 'ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh ^ }(hj'hhhNhNubj)}(h**i**h]hi}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh) with relaxed ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hj 'ubjM)}(h;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$;ubh with relaxed ordering.}(hj$;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hju:ubjM)}(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.}(hjW;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hju:ubjM)}(h **Return**h]j)}(hjh;h]hReturn}(hjj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hju:ubjM)}(hThe original value of **v**.h](hThe original value of }(hj~;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~;ubh.}(hj~;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hju:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_cmpxchg (C function)c.atomic64_cmpxchghNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchgsbc.atomic64_cmpxchgasbuh1hhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhj;hM ubh)}(hatomic64_cmpxchgh]j)}(hj;h]hatomic64_cmpxchg}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhj;hM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j;c.atomic64_cmpxchgasbuh1hhj <ubjQ)}(h h]h }(hj2<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj <ubj)}(hjh]h*}(hj@<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj <ubj)}(hjh]hv}(hjM<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj <ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj <ubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjh<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjj<modnameN classnameNjwjz)}j}]j;c.atomic64_cmpxchgasbuh1hhja<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhja<ubj)}(holdh]hold}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj <ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j;c.atomic64_cmpxchgasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hnewh]hnew}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj <ubeh}(h]h ]h"]h$]h&]jjuh1j3hj;hhhj;hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhj;hM ubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;hM hj;hhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhj;hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj(=h]h Parameters}(hj*=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&=ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjG=h]h atomic64_t *v}(hjI=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjE=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjA=ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj`=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\=hM hj]=ubah}(h]h ]h"]h$]h&]uh1jhjA=ubeh}(h]h ]h"]h$]h&]uh1jhj\=hM hj>=ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hj=h]hs64 old}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjz=ubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhjz=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj>=ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj=h]hs64 new}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=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]jM)}(hs64 value to assignh]hs64 value to assign}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=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"=ubjM)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"=ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj >hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubh == }(hj >hhhNhNubj)}(h**old**h]hold}(hj$>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubh), atomically updates }(hj >hhhNhNubj)}(h**v**h]hv}(hj6>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubh to }(hj >hhhNhNubj)}(h**new**h]hnew}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubh with full ordering. Otherwise, }(hj >hhhNhNubj)}(h**v**h]hv}(hjZ>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubh2 is not modified and relaxed ordering is provided.}(hj >hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"=ubjM)}(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.}(hjs>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"=ubjM)}(h **Return**h]j)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"=ubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic64_cmpxchg_acquire (C function)c.atomic64_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_acquiresbc.atomic64_cmpxchg_acquireasbuh1hhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj>hM ubh)}(hatomic64_cmpxchg_acquireh]j)}(hj>h]hatomic64_cmpxchg_acquire}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj>hM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj0?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2?modnameN classnameNjwjz)}j}]j>c.atomic64_cmpxchg_acquireasbuh1hhj)?ubjQ)}(h h]h }(hjN?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)?ubj)}(hjh]h*}(hj\?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)?ubj)}(hjh]hv}(hji?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%?ubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j>c.atomic64_cmpxchg_acquireasbuh1hhj}?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}?ubj)}(holdh]hold}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%?ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j>c.atomic64_cmpxchg_acquireasbuh1hhj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hnewh]hnew}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%?ubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj>hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj>hM ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>hM hj>hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj"@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj@hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj>hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:@jHj:@jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjD@h]h Parameters}(hjF@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB@ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjc@h]h atomic64_t *v}(hje@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja@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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx@hM hjy@ubah}(h]h ]h"]h$]h&]uh1jhj]@ubeh}(h]h ]h"]h$]h&]uh1jhjx@hM hjZ@ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hj@h]hs64 old}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@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]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjZ@ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj@h]hs64 new}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@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]jM)}(hs64 value to assignh]hs64 value to assign}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjZ@ubeh}(h]h ]h"]h$]h&]uh1jhj>@ubjM)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj>@ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj&AhhhNhNubj)}(h**v**h]hv}(hj.AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubh == }(hj&AhhhNhNubj)}(h**old**h]hold}(hj@AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubh), atomically updates }(hj&AhhhNhNubj)}(h**v**h]hv}(hjRAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubh to }(hj&AhhhNhNubj)}(h**new**h]hnew}(hjdAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubh# with acquire ordering. Otherwise, }(hj&AhhhNhNubj)}(h**v**h]hv}(hjvAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubh2 is not modified and relaxed ordering is provided.}(hj&AhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj>@ubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj>@ubjM)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj>@ubjM)}(hThe original value of **v**.h](hThe original value of }(hjAhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj>@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic64_cmpxchg_release (C function)c.atomic64_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_releasesbc.atomic64_cmpxchg_releaseasbuh1hhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjBhM ubh)}(hatomic64_cmpxchg_releaseh]j)}(hjBh]hatomic64_cmpxchg_release}(hj.BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Bubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjBhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjLBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNBmodnameN classnameNjwjz)}j}]jBc.atomic64_cmpxchg_releaseasbuh1hhjEBubjQ)}(h h]h }(hjjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEBubj)}(hjh]h*}(hjxBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEBubj)}(hjh]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjABubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]jBc.atomic64_cmpxchg_releaseasbuh1hhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(holdh]hold}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjABubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]jBc.atomic64_cmpxchg_releaseasbuh1hhjBubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hnewh]hnew}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjABubeh}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjBhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjBhM ubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhM hjAhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj>ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;Chhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjBhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVCjHjVCjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj`Ch]h Parameters}(hjbChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Cubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjCh]h atomic64_t *v}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}Cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyCubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjyCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjvCubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjCh]hs64 old}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjvCubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjCh]hs64 new}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjvCubeh}(h]h ]h"]h$]h&]uh1jhjZCubjM)}(h**Description**h]j)}(hj,Dh]h Description}(hj.DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Dubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjBDhhhNhNubj)}(h**v**h]hv}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubh == }(hjBDhhhNhNubj)}(h**old**h]hold}(hj\DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubh), atomically updates }(hjBDhhhNhNubj)}(h**v**h]hv}(hjnDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubh to }(hjBDhhhNhNubj)}(h**new**h]hnew}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubh# with release ordering. Otherwise, }(hjBDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBDubh2 is not modified and relaxed ordering is provided.}(hjBDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic64_cmpxchg_relaxed (C function)c.atomic64_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_relaxedsbc.atomic64_cmpxchg_relaxedasbuh1hhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj8EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhj7EhM ubh)}(hatomic64_cmpxchg_relaxedh]j)}(hj4Eh]hatomic64_cmpxchg_relaxed}(hjJEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhj7EhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjEmodnameN classnameNjwjz)}j}]j2Ec.atomic64_cmpxchg_relaxedasbuh1hhjaEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaEubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]Eubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j2Ec.atomic64_cmpxchg_relaxedasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(holdh]hold}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]Eubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j2Ec.atomic64_cmpxchg_relaxedasbuh1hhjEubjQ)}(h h]h }(hj"FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hnewh]hnew}(hj0FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]Eubeh}(h]h ]h"]h$]h&]jjuh1j3hjEhhhj7EhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Ehhhj7EhM ubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7EhM hjEhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjZFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWFhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhj7EhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrFjHjrFjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj|Fh]h Parameters}(hj~FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjFh]h atomic64_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjFubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjFubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjFh]hs64 old}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjFubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjFubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj Gh]hs64 new}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Gubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjGubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj&GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"GhM hj#Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj"GhM hjFubeh}(h]h ]h"]h$]h&]uh1jhjvFubjM)}(h**Description**h]j)}(hjHGh]h Description}(hjJGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj^GhhhNhNubj)}(h**v**h]hv}(hjfGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubh == }(hj^GhhhNhNubj)}(h**old**h]hold}(hjxGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubh), atomically updates }(hj^GhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubh to }(hj^GhhhNhNubj)}(h**new**h]hnew}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubh# with relaxed ordering. Otherwise, }(hj^GhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubh2 is not modified and relaxed ordering is provided.}(hj^GhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubjM)}(hThe original value of **v**.h](hThe original value of }(hjGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!atomic64_try_cmpxchg (C function)c.atomic64_try_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(hPh]h atomic64_t *v}(hj@PhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXUhMq hj@Uhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj5VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hj2Vhhubah}(h]h ]h"]h$]h&]uh1j3hj@UhhhjXUhMq ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjMVjHjMVjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjWVh]h Parameters}(hjYVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjQVubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjvVh]hs64 i}(hjxVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMr hjpVubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMr hjVubah}(h]h ]h"]h$]h&]uh1jhjpVubeh}(h]h ]h"]h$]h&]uh1jhjVhMr hjmVubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjVh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMs hjVubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMs hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMs hjmVubeh}(h]h ]h"]h$]h&]uh1jhjQVubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjQVubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjWhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to (}(hjWhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh - }(hjWhhhNhNubj)}(h**i**h]hi}(hj,WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh) with full ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMt hjQVubjM)}(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.}(hjEWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMv hjQVubjM)}(h **Return**h]j)}(hjVWh]hReturn}(hjXWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTWubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMx hjQVubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjpWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlWubh if the resulting value of }(hjlWhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlWubh is zero, }(hjlWhhhNhNubj)}(h **false**h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlWubh otherwise.}(hjlWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjQVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_dec_and_test (C function)c.atomic64_dec_and_testhNtauh1hhjhhhNhNubh)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhM ubh)}(hatomic64_dec_and_testh]j)}(hatomic64_dec_and_testh]hatomic64_dec_and_test}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjWhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsjWsbc.atomic64_dec_and_testasbuh1hhjXubjQ)}(h h]h }(hj,XhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hj:XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hv}(hjGXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubah}(h]h ]h"]h$]h&]jjuh1j3hjWhhhjWhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjWhM ubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhM hjWhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjpXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmXhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjXh]h atomic64_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhM hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhM hjXubah}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjYhhhNhNubj)}(h**v**h]hv}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh to (}(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh - 1) with full ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubjM)}(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.}(hj5YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubjM)}(h **Return**h]j)}(hjFYh]hReturn}(hjHYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj`YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Yubh if the resulting value of }(hj\YhhhNhNubj)}(h**v**h]hv}(hjrYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Yubh is zero, }(hj\YhhhNhNubj)}(h **false**h]hfalse}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Yubh otherwise.}(hj\YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_inc_and_test (C function)c.atomic64_inc_and_testhNtauh1hhjhhhNhNubh)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhM ubh)}(hatomic64_inc_and_testh]j)}(hatomic64_inc_and_testh]hatomic64_inc_and_test}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsjYsbc.atomic64_inc_and_testasbuh1hhjYubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hj*ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hv}(hj7ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubah}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjYhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjYhM ubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhM hjYhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj`ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj]Zhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxZjHjxZjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|Zubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjZh]h atomic64_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhj|ZubjM)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ZubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh + 1) with full ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ZubjM)}(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.}(hj%[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ZubjM)}(h **Return**h]j)}(hj6[h]hReturn}(hj8[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4[ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ZubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjP[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL[ubh if the resulting value of }(hjL[hhhNhNubj)}(h**v**h]hv}(hjb[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL[ubh is zero, }(hjL[hhhNhNubj)}(h **false**h]hfalse}(hjt[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL[ubh otherwise.}(hjL[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|Zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_add_negative (C function)c.atomic64_add_negativehNtauh1hhjhhhNhNubh)}(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}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hM ubh)}(hatomic64_add_negativeh]j)}(hatomic64_add_negativeh]hatomic64_add_negative}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhj[hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j)}jsj[sbc.atomic64_add_negativeasbuh1hhj[ubjQ)}(h h]h }(hj \hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]hi}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj5\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7\modnameN classnameNjwjz)}j}]j\c.atomic64_add_negativeasbuh1hhj.\ubjQ)}(h h]h }(hjS\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.\ubj)}(hjh]h*}(hja\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.\ubj)}(hjh]hv}(hjn\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhj[hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhj[hM ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hM hj[hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj\h]hs64 i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\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]jM)}(hs64 value to addh]hs64 value to add}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\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]jS)}(hj]h]h atomic64_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&]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\ubjM)}(h**Description**h]j)}(hjL]h]h Description}(hjN]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjb]hhhNhNubj)}(h**v**h]hv}(hjj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb]ubh to (}(hjb]hhhNhNubj)}(h**v**h]hv}(hj|]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb]ubh + }(hjb]hhhNhNubj)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb]ubh) with full ordering.}(hjb]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_add_negative() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_add_negative() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh if the resulting value of }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh is negative, }(hj]hhhNhNubj)}(h **false**h]hfalse}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh otherwise.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_add_negative_acquire (C function)c.atomic64_add_negative_acquirehNtauh1hhjhhhNhNubh)}(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}(hj/^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj=^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+^hhhj<^hM ubh)}(hatomic64_add_negative_acquireh]j)}(hatomic64_add_negative_acquireh]hatomic64_add_negative_acquire}(hjO^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+^hhhj<^hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjn^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjp^modnameN classnameNjwjz)}j}]j)}jsjQ^sbc.atomic64_add_negative_acquireasbuh1hhjg^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg^ubj)}(hjh]hi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc^ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j^c.atomic64_add_negative_acquireasbuh1hhj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj+^hhhj<^hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'^hhhj<^hM ubah}(h]j"^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<^hM hj$^hhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1j3hj$^hhhj<^hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1_jHj1_jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;_h]h Parameters}(hj=_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjZ_h]hs64 i}(hj\_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjT_ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjs_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjo_hM hjp_ubah}(h]h ]h"]h$]h&]uh1jhjT_ubeh}(h]h ]h"]h$]h&]uh1jhjo_hM hjQ_ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj_h]h atomic64_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hjQ_ubeh}(h]h ]h"]h$]h&]uh1jhj5_ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh + }(hj_hhhNhNubj)}(h**i**h]hi}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh) with acquire ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubjM)}(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)`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubjM)}(h **Return**h]j)}(hj:`h]hReturn}(hj<`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjT`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP`ubh if the resulting value of }(hjP`hhhNhNubj)}(h**v**h]hv}(hjf`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP`ubh is negative, }(hjP`hhhNhNubj)}(h **false**h]hfalse}(hjx`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP`ubh otherwise.}(hjP`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_add_negative_release (C function)c.atomic64_add_negative_releasehNtauh1hhjhhhNhNubh)}(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}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhj`hM ubh)}(hatomic64_add_negative_releaseh]j)}(hatomic64_add_negative_releaseh]hatomic64_add_negative_release}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhj`hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]j)}jsj`sbc.atomic64_add_negative_releaseasbuh1hhj`ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]hi}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj9ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6aubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;amodnameN classnameNjwjz)}j}]j ac.atomic64_add_negative_releaseasbuh1hhj2aubjQ)}(h h]h }(hjWahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2aubj)}(hjh]h*}(hjeahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2aubj)}(hjh]hv}(hjrahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2aubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj`hhhj`hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hM ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hM hj`hhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjahhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjah]hs64 i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM hjaubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjbh]h atomic64_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjbubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.bhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*bhM hj+bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj*bhM hjaubeh}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h**Description**h]j)}(hjPbh]h Description}(hjRbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNbubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjfbhhhNhNubj)}(h**v**h]hv}(hjnbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfbubh to (}(hjfbhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfbubh + }(hjfbhhhNhNubj)}(h**i**h]hi}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfbubh) with release ordering.}(hjfbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubjM)}(h **Return**h]j)}(hjbh]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh if the resulting value of }(hjbhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh is negative, }(hjbhhhNhNubj)}(h **false**h]hfalse}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh otherwise.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_add_negative_relaxed (C function)c.atomic64_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj3chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/chhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjAchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/chhhj@chM ubh)}(hatomic64_add_negative_relaxedh]j)}(hatomic64_add_negative_relaxedh]hatomic64_add_negative_relaxed}(hjSchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/chhhj@chM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjrchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjocubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtcmodnameN classnameNjwjz)}j}]j)}jsjUcsbc.atomic64_add_negative_relaxedasbuh1hhjkcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkcubj)}(hjh]hi}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgcubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]jcc.atomic64_add_negative_relaxedasbuh1hhjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hv}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgcubeh}(h]h ]h"]h$]h&]jjuh1j3hj/chhhj@chM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+chhhj@chM ubah}(h]j&cah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@chM hj(chhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjdhhubah}(h]h ]h"]h$]h&]uh1j3hj(chhhj@chM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5djHj5djIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?dh]h Parameters}(hjAdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=dubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9dubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj^dh]hs64 i}(hj`dhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjXdubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjwdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjsdhM hjtdubah}(h]h ]h"]h$]h&]uh1jhjXdubeh}(h]h ]h"]h$]h&]uh1jhjsdhM hjUdubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjdh]h atomic64_t *v}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjdubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhM hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhM hjUdubeh}(h]h ]h"]h$]h&]uh1jhj9dubjM)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9dubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjdhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh to (}(hjdhhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh + }(hjdhhhNhNubj)}(h**i**h]hi}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh) with relaxed ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9dubjM)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.}(hj-ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9dubjM)}(h **Return**h]j)}(hj>eh]hReturn}(hj@ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= 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](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjnubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjoh]h atomic64_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 hj oubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&ohM0 hj'oubah}(h]h ]h"]h$]h&]uh1jhj oubeh}(h]h ]h"]h$]h&]uh1jhj&ohM0 hjoubah}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjLoh]h Description}(hjNohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjnubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjbohhhNhNubj)}(h**v**h]hv}(hjjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjboubh >= 0), atomically updates }(hjbohhhNhNubj)}(h**v**h]hv}(hj|ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjboubh to (}(hjbohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjboubh% + 1) with full ordering. Otherwise, }(hjbohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjboubh2 is not modified and relaxed ordering is provided.}(hjbohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjnubjM)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hjnubjM)}(h **Return**h]j)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6 hjnubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh if }(hjohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh was updated, }(hjohhhNhNubj)}(h **false**h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh otherwise.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic64_dec_unless_positive (C function)c.atomic64_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h0bool atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hjAphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=phhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB ubjQ)}(h h]h }(hjOphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=phhhjNphMB ubh)}(hatomic64_dec_unless_positiveh]j)}(hatomic64_dec_unless_positiveh]hatomic64_dec_unless_positive}(hjaphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]pubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=phhhjNphMB ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}pubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjcpsbc.atomic64_dec_unless_positiveasbuh1hhjypubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjypubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjypubj)}(hjh]hv}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjypubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjupubah}(h]h ]h"]h$]h&]jjuh1j3hj=phhhjNphMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9phhhjNphMB ubah}(h]j4pah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNphMB hj6phhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB hjphhubah}(h]h ]h"]h$]h&]uh1j3hj6phhhjNphMB ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjqubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj%qh]h atomic64_t *v}(hj'qhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#qubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMC hjqubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:qhMC hj;qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhj:qhMC hjqubah}(h]h ]h"]h$]h&]uh1jhjqubjM)}(h**Description**h]j)}(hj`qh]h Description}(hjbqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^qubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjqubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjvqhhhNhNubj)}(h**v**h]hv}(hj~qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvqubh <= 0), atomically updates }(hjvqhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvqubh to (}(hjvqhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvqubh% - 1) with full ordering. Otherwise, }(hjvqhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvqubh2 is not modified and relaxed ordering is provided.}(hjvqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hjqubjM)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjqubjM)}(h **Return**h]j)}(hjqh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hjqubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh if }(hjqhhhNhNubj)}(h**v**h]hv}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh was updated, }(hjqhhhNhNubj)}(h **false**h]hfalse}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh otherwise.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic64_dec_if_positive (C function)c.atomic64_dec_if_positivehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjXrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZrmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_if_positivesbc.atomic64_dec_if_positiveasbuh1hhjQrhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubjQ)}(h h]h }(hjzrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQrhhhjyrhMU ubh)}(hatomic64_dec_if_positiveh]j)}(hjvrh]hatomic64_dec_if_positive}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQrhhhjyrhMU ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjrmodnameN classnameNjwjz)}j}]jtrc.atomic64_dec_if_positiveasbuh1hhjrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubah}(h]h ]h"]h$]h&]jjuh1j3hjQrhhhjyrhMU ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMrhhhjyrhMU ubah}(h]jHrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyrhMU hjJrhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hj shhubah}(h]h ]h"]h$]h&]uh1j3hjJrhhhjyrhMU ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$sjHj$sjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj.sh]h Parameters}(hj0shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,subah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj(subj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjMsh]h atomic64_t *v}(hjOshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjGsubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbshMV hjcsubah}(h]h ]h"]h$]h&]uh1jhjGsubeh}(h]h ]h"]h$]h&]uh1jhjbshMV hjDsubah}(h]h ]h"]h$]h&]uh1jhj(subjM)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hj(subjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh > 0), atomically updates }(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh to (}(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh% - 1) with full ordering. Otherwise, }(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh2 is not modified and relaxed ordering is provided.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hj(subjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hj(subjM)}(h **Return**h]j)}(hjth]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hj(subjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjthhhNhNubj)}(h**v**h]hv}(hj$thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh - 1), regardless of whether }(hjthhhNhNubj)}(h**v**h]hv}(hj6thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh was updated.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hj(subeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_read (C function)c.atomic_long_readhNtauh1hhjhhhNhNubh)}(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}(hjothhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkthhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh ubjQ)}(h h]h }(hj~thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkthhhj}thMh ubh)}(hatomic_long_readh]j)}(hatomic_long_readh]hatomic_long_read}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjkthhhj}thMh ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjthhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubh)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsjtsbc.atomic_long_readasbuh1hhjtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubah}(h]h ]h"]h$]h&]jjuh1j3hjkthhhj}thMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjgthhhj}thMh ubah}(h]jbtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj}thMh hjdthhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj.uhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hj+uhhubah}(h]h ]h"]h$]h&]uh1j3hjdthhhj}thMh ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFujHjFujIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjPuh]h Parameters}(hjRuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNuubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjJuubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjouh]hconst atomic_long_t *v}(hjquhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hjiuubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMi hjuubah}(h]h ]h"]h$]h&]uh1jhjiuubeh}(h]h ]h"]h$]h&]uh1jhjuhMi hjfuubah}(h]h ]h"]h$]h&]uh1jhjJuubjM)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjJuubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh with relaxed ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjJuubjM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjJuubjM)}(h **Return**h]j)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hjJuubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjJuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_read_acquire (C function)c.atomic_long_read_acquirehNtauh1hhjhhhNhNubh)}(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}(hjIvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEvhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy ubjQ)}(h h]h }(hjXvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEvhhhjWvhMy ubh)}(hatomic_long_read_acquireh]j)}(hatomic_long_read_acquireh]hatomic_long_read_acquire}(hjjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfvubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEvhhhjWvhMy ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjvubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubh)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsjlvsbc.atomic_long_read_acquireasbuh1hhjvubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]hv}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~vubah}(h]h ]h"]h$]h&]jjuh1j3hjEvhhhjWvhMy ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAvhhhjWvhMy ubah}(h]jvhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjwhhubah}(h]h ]h"]h$]h&]uh1j3hj>vhhhjWvhMy ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj wjHj wjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*wh]h Parameters}(hj,whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(wubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj$wubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjIwh]hconst atomic_long_t *v}(hjKwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGwubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjCwubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^whMz hj_wubah}(h]h ]h"]h$]h&]uh1jhjCwubeh}(h]h ]h"]h$]h&]uh1jhj^whMz hj@wubah}(h]h ]h"]h$]h&]uh1jhj$wubjM)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hj$wubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjwhhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh with acquire ordering.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hj$wubjM)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj$wubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$wubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjwhhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$wubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_set (C function)c.atomic_long_sethNtauh1hhjhhhNhNubh)}(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}(hj#xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj2xhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxhhhj1xhM ubh)}(hatomic_long_seth]j)}(hatomic_long_seth]hatomic_long_set}(hjDxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@xubah}(h]h ](jjeh"]h$]h&]jjuh1hhjxhhhj1xhM ubj4)}(h(atomic_long_t *v, long i)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjcxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjexmodnameN classnameNjwjz)}j}]j)}jsjFxsbc.atomic_long_setasbuh1hhj\xubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\xubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\xubj)}(hjh]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXxubj:)}(hlong ih](j)}(hlongh]hlong}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXxubeh}(h]h ]h"]h$]h&]jjuh1j3hjxhhhj1xhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhj1xhM ubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1xhM hjxhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhj1xhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:yubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6yubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjUyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQyhM hjRyubah}(h]h ]h"]h$]h&]uh1jhj6yubeh}(h]h ]h"]h$]h&]uh1jhjQyhM hj3yubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hjuyh]hlong i}(hjwyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoyubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM hjyubah}(h]h ]h"]h$]h&]uh1jhjoyubeh}(h]h ]h"]h$]h&]uh1jhjyhM hj3yubeh}(h]h ]h"]h$]h&]uh1jhjyubjM)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjyhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh to }(hjyhhhNhNubj)}(h**i**h]hi}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh with relaxed ordering.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubjM)}(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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubjM)}(h **Return**h]j)}(hj zh]hReturn}(hj zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubjM)}(hNothing.h]hNothing.}(hj zhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_long_set_release (C function)c.atomic_long_set_releasehNtauh1hhjhhhNhNubh)}(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}(hjOzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj^zhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKzhhhj]zhM ubh)}(hatomic_long_set_releaseh]j)}(hatomic_long_set_releaseh]hatomic_long_set_release}(hjpzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKzhhhj]zhM ubj4)}(h(atomic_long_t *v, long i)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsjrzsbc.atomic_long_set_releaseasbuh1hhjzubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]hv}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubj:)}(hlong ih](j)}(hlongh]hlong}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubeh}(h]h ]h"]h$]h&]jjuh1j3hjKzhhhj]zhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGzhhhj]zhM ubah}(h]jBzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]zhM hjDzhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hj'{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj${hhubah}(h]h ]h"]h$]h&]uh1j3hjDzhhhj]zhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?{jHj?{jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjI{h]h Parameters}(hjK{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh{h]hatomic_long_t *v}(hjj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjf{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjb{ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}{hM hj~{ubah}(h]h ]h"]h$]h&]uh1jhjb{ubeh}(h]h ]h"]h$]h&]uh1jhj}{hM hj_{ubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hj{h]hlong i}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{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]jM)}(hlong value to assignh]hlong value to assign}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hM hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hM hj_{ubeh}(h]h ]h"]h$]h&]uh1jhjC{ubjM)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj{hhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh to }(hj{hhhNhNubj)}(h**i**h]hi}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh with release ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubjM)}(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%|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubjM)}(h **Return**h]j)}(hj6|h]hReturn}(hj8|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4|ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubjM)}(hNothing.h]hNothing.}(hjL|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjC{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_add (C function)c.atomic_long_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_add (long i, atomic_long_t *v)h]h)}(h.void atomic_long_add(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj{|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw|hhhj|hM ubh)}(hatomic_long_addh]j)}(hatomic_long_addh]hatomic_long_add}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjw|hhhj|hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]hi}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j)}jsj|sbc.atomic_long_addasbuh1hhj|ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hv}(hj*}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjw|hhhj|hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjs|hhhj|hM ubah}(h]jn|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hM hjp|hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjS}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjP}hhubah}(h]h ]h"]h$]h&]uh1j3hjp|hhhj|hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjk}jHjk}jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hju}h]h Parameters}(hjw}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj}h]hlong i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}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]jM)}(hlong value to addh]hlong value to add}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj}h]hatomic_long_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubeh}(h]h ]h"]h$]h&]uh1jhjo}ubjM)}(h**Description**h]j)}(hj~h]h Description}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj~hhhNhNubj)}(h**v**h]hv}(hj&~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to (}(hj~hhhNhNubj)}(h**v**h]hv}(hj8~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh + }(hj~hhhNhNubj)}(h**i**h]hi}(hjJ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh) with relaxed ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubjM)}(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.}(hjc~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubjM)}(h **Return**h]j)}(hjt~h]hReturn}(hjv~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr~ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubjM)}(hNothing.h]hNothing.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjo}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_add_return (C function)c.atomic_long_add_returnhNtauh1hhjhhhNhNubh)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hM ubh)}(hatomic_long_add_returnh]j)}(hatomic_long_add_returnh]hatomic_long_add_return}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsj~sbc.atomic_long_add_returnasbuh1hhj&ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hjh]hv}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhj~hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hM ubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hM hj~hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj\hhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh to (}(hj\hhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh + }(hj\hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh) with full ordering.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjȀhhhNhNubj)}(h**v**h]hv}(hjЀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȀubh.}(hjȀhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_add_return_acquire (C function) c.atomic_long_add_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_add_return_acquireh]j)}(hatomic_long_add_return_acquireh]hatomic_long_add_return_acquire}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]hi}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj,sb c.atomic_long_add_return_acquireasbuh1hhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjށhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj"h]hlong i}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hlong value to addh]hlong value to add}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hM 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]jS)}(hj[h]hatomic_long_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjUubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjƂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj؂hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_add_return_release (C function) c.atomic_long_add_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjghM ubh)}(hatomic_long_add_return_releaseh]j)}(hatomic_long_add_return_releaseh]hatomic_long_add_return_release}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhjghM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj̓hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʃubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjσmodnameN classnameNjwjz)}j}]j)}jsj|sb c.atomic_long_add_return_releaseasbuh1hhjƃubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƃubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƃubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƃubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjUhhhjghM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQhhhjghM ubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjghM hjNhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1j3hjNhhhjghM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIjHjIjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjrh]hlong i}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjĄhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_add_return_relaxed (C function) c.atomic_long_add_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_add_return_relaxedh]j)}(hatomic_long_add_return_relaxedh]hatomic_long_add_return_relaxed}(hjʅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƅubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjޅubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj̅sb c.atomic_long_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjޅubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj†h]hlong i}(hjĆhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjۆhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj׆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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh to (}(hjLhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh + }(hjLhhhNhNubj)}(h**i**h]hi}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh) with relaxed ordering.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_add (C function)c.atomic_long_fetch_addhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_fetch_addh]j)}(hatomic_long_fetch_addh]hatomic_long_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]hi}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_addasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjшhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjΈhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hlong value to addh]hlong value to add}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hj ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjKh]hatomic_long_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjEubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hM hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjȉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_add_acquire (C function)c.atomic_long_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(hhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjWhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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_fetch_add_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjbh]hlong i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`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]jM)}(hlong value to addh]hlong value to add}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhM hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM hjYubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hj֋h]h Description}(hj؋hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԋubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hj=ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hj=ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_acquire() there.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hj=ubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM% hj=ubjM)}(hThe original value of **v**.h](hThe original value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM& hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_add_release (C function)c.atomic_long_fetch_add_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_release (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}(hjǕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÕhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz ubjQ)}(h h]h }(hj֕hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjÕhhhjՕhMz ubh)}(hatomic_long_sub_return_acquireh]j)}(hatomic_long_sub_return_acquireh]hatomic_long_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjÕhhhjՕhMz ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_sub_return_acquireasbuh1hhj4ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjÕhhhjՕhMz ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjՕhMz ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjՕhMz hjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjՕhMz ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjÖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjޖ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]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM{ 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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hM| hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hM| hjזubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjjhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh to (}(hjjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh - }(hjjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh) with acquire ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hj—hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj֗hhhNhNubj)}(h**v**h]hv}(hjޗhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֗ubh.}(hj֗hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_sub_return_release (C function) c.atomic_long_sub_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hM ubh)}(hatomic_long_sub_return_releaseh]j)}(hatomic_long_sub_return_releaseh]hatomic_long_sub_return_release}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj%hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]hi}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj:sb c.atomic_long_sub_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjƘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj%hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj%hM ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hM hj hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj%hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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 subtract h](j)}(h ``long i``h]jS)}(hj0h]hlong i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.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]jM)}(hlong value to subtracth]hlong value to subtract}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM hj'ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjih]hatomic_long_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hM hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj™hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjԙhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj&hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_sub_return_relaxed (C function) c.atomic_long_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjuhM ubh)}(hatomic_long_sub_return_relaxedh]j)}(hatomic_long_sub_return_relaxedh]hatomic_long_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjuhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjۚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؚubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjݚmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_sub_return_relaxedasbuh1hhjԚubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjԚubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԚubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԚubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjuhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjuhM ubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhM hj\hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjuhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/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 subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM hjwubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjқhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjΛhM hjϛubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΛhM hjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - }(hj hhhNhNubj)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjvhhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_sub (C function)c.atomic_long_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjƜhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjŜhM ubh)}(hatomic_long_fetch_subh]j)}(hatomic_long_fetch_subh]hatomic_long_fetch_sub}(hj؜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԜubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjŜhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsjڜsbc.atomic_long_fetch_subasbuh1hhj$ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hv}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjŜhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjŜhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjŜhM hjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjŜhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjНh]hlong i}(hjҝhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjΝ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]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjǝubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh - }(hjZhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh) with full ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjƞhhhNhNubj)}(h**v**h]hv}(hjΞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƞubh.}(hjƞhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_sub_acquire (C function)c.atomic_long_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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 }(hj-hhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh to (}(hj-hhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh + 1) with relaxed ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjqh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_inc_return (C function)c.atomic_long_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.long atomic_long_inc_return (atomic_long_t *v)h]h)}(h-long atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjŧhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjħhM ubh)}(hatomic_long_inc_returnh]j)}(hatomic_long_inc_returnh]hatomic_long_inc_return}(hjקhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӧubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjħhM ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj٧sbc.atomic_long_inc_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjħhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjħhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjħhM hjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjħhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubjM)}(h**Description**h]j)}(hj֨h]h Description}(hjبhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԨubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjFhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_inc_return_acquire (C function) c.atomic_long_inc_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_acquire (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_inc_return_acquireh]j)}(hatomic_long_inc_return_acquireh]hatomic_long_inc_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjǩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĩubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjɩmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_inc_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj|hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjGubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjlh]hatomic_long_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjGubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjŪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjתhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjGubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjGubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjGubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_inc_return_release (C function) c.atomic_long_inc_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjThhhjfhM/ubh)}(hatomic_long_inc_return_releaseh]j)}(hatomic_long_inc_return_releaseh]hatomic_long_inc_return_release}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjThhhjfhM/ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj{sb c.atomic_long_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjƫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjӫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjThhhjfhM/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjfhM/ubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjfhM/hjMhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhjfhM/ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj=h]hatomic_long_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj7ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhM0hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM0hj4ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubjM)}(h **Return**h]j)}(hjҬh]hReturn}(hjԬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЬubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_inc_return_relaxed (C function) c.atomic_long_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj7hMAubh)}(hatomic_long_inc_return_relaxedh]j)}(hatomic_long_inc_return_relaxedh]hatomic_long_inc_return_relaxed}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj7hMAubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsjLsb c.atomic_long_inc_return_relaxedasbuh1hhjbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubah}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj7hMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj7hMAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMAhjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjͭhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjʭhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMBhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMBhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh + 1) with relaxed ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_inc (C function)c.atomic_long_fetch_inchNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMRubh)}(hatomic_long_fetch_inch]j)}(hatomic_long_fetch_inch]hatomic_long_fetch_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMRubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_incasbuh1hhj3ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMRubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMRhjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj¯hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj߯h]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjݯubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjٯubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjٯubeh}(h]h ]h"]h$]h&]uh1jhjhMShj֯ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh + 1) with full ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubjM)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_inc_acquire (C function)c.atomic_long_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_acquire (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj˰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǰhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdubjQ)}(h h]h }(hjڰhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjǰhhhjٰhMdubh)}(hatomic_long_fetch_inc_acquireh]j)}(hatomic_long_fetch_inc_acquireh]hatomic_long_fetch_inc_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjǰhhhjٰhMdubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_inc_acquireasbuh1hhjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjǰhhhjٰhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjðhhhjٰhMdubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjٰhMdhjhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjlhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjٰhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjɱhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjűhMehjƱubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjűhMehjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubjM)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_inc_release (C function)c.atomic_long_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_release (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMuubh)}(hatomic_long_fetch_inc_releaseh]j)}(hatomic_long_fetch_inc_releaseh]hatomic_long_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMuubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjܲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٲubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj޲modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_inc_releaseasbuh1hhjղubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjղubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjղubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjղubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjѲubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMuubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhj=hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj\ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj{ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj\ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjҳhhhNhNubj)}(h**v**h]hv}(hjڳhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҳubh to (}(hjҳhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҳubh + 1) with release ordering.}(hjҳhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhj\ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj\ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hj\ubjM)}(hThe original value of **v**.h](hThe original value of }(hj,hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_inc_relaxed (C function)c.atomic_long_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhj{hMubh)}(hatomic_long_fetch_inc_relaxedh]j)}(hatomic_long_fetch_inc_relaxedh]hatomic_long_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhj{hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hjʹhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj۴hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjihhhj{hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhj{hMubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMhjbhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhj{hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjRh]hatomic_long_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.}(hjֵhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_dec (C function)c.atomic_long_dechNtauh1hhjhhhNhNubh)}(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}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhjLhMubh)}(hatomic_long_dech]j)}(hatomic_long_dech]hatomic_long_dec}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjLhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjasbc.atomic_long_decasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubah}(h]h ]h"]h$]h&]jjuh1j3hj:hhhjLhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhjLhMubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhMhj3hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj߶hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhjLhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj#h]hatomic_long_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh to (}(hjthhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh - 1) with relaxed ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjηhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_dec_return (C function)c.atomic_long_dec_returnhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hatomic_long_dec_returnh]j)}(hatomic_long_dec_returnh]hatomic_long_dec_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_long_dec_returnasbuh1hhj6ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjøh]h Parameters}(hjŸhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܸubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܸubeh}(h]h ]h"]h$]h&]uh1jhjhMhjٸubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj3hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh to (}(hj3hhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh - 1) with full ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_acquire (C function) c.atomic_long_dec_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjιhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʹhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjݹhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjʹhhhjܹhMubh)}(hatomic_long_dec_return_acquireh]j)}(hatomic_long_dec_return_acquireh]hatomic_long_dec_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjʹhhhjܹhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *v`h](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjʹhhhjܹhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjƹhhhjܹhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjܹhMhjùhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjohhubah}(h]h ]h"]h$]h&]uh1j3hjùhhhjܹhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj̺hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjȺhMhjɺubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȺhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj^hhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_release (C function) c.atomic_long_dec_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_release (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_dec_return_releaseh]j)}(hatomic_long_dec_return_releaseh]hatomic_long_dec_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj߻hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܻubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj»sb c.atomic_long_dec_return_releaseasbuh1hhjػubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjػubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjػubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjػubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjԻubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj[jHj[jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjռhhhNhNubj)}(h**v**h]hv}(hjݼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjռubh to (}(hjռhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjռubh - 1) with release ordering.}(hjռhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_relaxed (C function) c.atomic_long_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlhhhj~hMubh)}(hatomic_long_dec_return_relaxedh]j)}(hatomic_long_dec_return_relaxedh]hatomic_long_dec_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhj~hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_dec_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjнhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj޽hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjlhhhj~hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhj~hMubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMhjehhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjehhhj~hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjUh]hatomic_long_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there.}(hjپhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_dec (C function)c.atomic_long_fetch_dechNtauh1hhjhhhNhNubh)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhjOhMubh)}(hatomic_long_fetch_dech]j)}(hatomic_long_fetch_dech]hatomic_long_fetch_dec}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhjOhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjdsbc.atomic_long_fetch_decasbuh1hhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubah}(h]h ]h"]h$]h&]jjuh1j3hj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhjOhMubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMhj6hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhjOhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj&h]hatomic_long_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjwhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh to (}(hjwhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh - 1) with full ordering.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_acquire (C function)c.atomic_long_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hatomic_long_fetch_dec_acquireh]j)}(hatomic_long_fetch_dec_acquireh]hatomic_long_fetch_dec_acquire}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]j)}jsj5sbc.atomic_long_fetch_dec_acquireasbuh1hhjKubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjHhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh to (}(hjHhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh - 1) with acquire ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_release (C function)c.atomic_long_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_fetch_dec_releaseh]j)}(hatomic_long_fetch_dec_releaseh]hatomic_long_fetch_dec_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_releaseasbuh1hhjubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjshhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_relaxed (C function)c.atomic_long_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM$ubh)}(hatomic_long_fetch_dec_relaxedh]j)}(hatomic_long_fetch_dec_relaxedh]hatomic_long_fetch_dec_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM$ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM$ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM$ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM$hjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjUhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjtubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjtubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hjtubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjtubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjtubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_and (C function)c.atomic_long_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_and (long i, atomic_long_t *v)h]h)}(h.void atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM5ubh)}(hatomic_long_andh]j)}(hatomic_long_andh]hatomic_long_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM5ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhM5ubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hjzhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjZhhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjyubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjyubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjyubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj(hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh to (}(hj(hhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh & }(hj(hhhNhNubj)}(h**i**h]hi}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh) with relaxed ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjyubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjyubjM)}(h **Return**h]j)}(hj~h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjyubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_and (C function)c.atomic_long_fetch_andhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMGubh)}(hatomic_long_fetch_andh]j)}(hatomic_long_fetch_andh]hatomic_long_fetch_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMGubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_andasbuh1hhj0ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMGubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMGhjhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMGubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMIhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMIhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjfhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh to (}(hjfhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh & }(hjfhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh) with full ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_and_acquire (C function)c.atomic_long_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_acquire (long i, atomic_long_t *v)h]h)}(hubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh & }(hjVhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_andnot (C function)c.atomic_long_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h2void atomic_long_andnot (long i, atomic_long_t *v)h]h)}(h1void atomic_long_andnot(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_andnoth]j)}(hatomic_long_andnoth]hatomic_long_andnot}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]hi}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsj&sbc.atomic_long_andnotasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_andnot() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjUh]hatomic_long_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.h]hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_fetch_andnot (C function)c.atomic_long_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h8long atomic_long_fetch_andnot (long i, atomic_long_t *v)h]h)}(h7long atomic_long_fetch_andnot(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhjOhMubh)}(hatomic_long_fetch_andnoth]j)}(hatomic_long_fetch_andnoth]hatomic_long_fetch_andnot}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhjOhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjdsbc.atomic_long_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhjOhMubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMhj6hhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhjOhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjZh]hlong i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh]jM)}(h long valueh]h long value}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(hThe original value of **v**.h](hThe original value of }(hjPhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_acquire (C function)"c.atomic_long_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_acquire (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_long_fetch_andnot_acquireh]j)}(h atomic_long_fetch_andnot_acquireh]h atomic_long_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb"c.atomic_long_fetch_andnot_acquireasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh & }(hj4hhhNhNubj)}(h**~i**h]h~i}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with acquire ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_release (C function)"c.atomic_long_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_long_fetch_andnot_releaseh]j)}(h atomic_long_fetch_andnot_releaseh]h atomic_long_fetch_andnot_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjsb"c.atomic_long_fetch_andnot_releaseasbuh1hhjNubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj3h]hatomic_long_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_relaxed (C function)"c.atomic_long_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj?hMubh)}(h atomic_long_fetch_andnot_relaxedh]j)}(h atomic_long_fetch_andnot_relaxedh]h atomic_long_fetch_andnot_relaxed}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj?hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjTsb"c.atomic_long_fetch_andnot_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(h]h ]h"]h$]h&]jjuh1j3hj-hhhj?hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj?hMubah}(h]j$ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hMhj&hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj?hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjJh]hlong i}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjDubj)}(hhh]jM)}(h long valueh]h long value}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj}ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubjM)}(h **Return**h]j)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubjM)}(hThe original value of **v**.h](hThe original value of }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_or (C function)c.atomic_long_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void atomic_long_or (long i, atomic_long_t *v)h]h)}(h-void atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhMubh)}(hatomic_long_orh]j)}(hatomic_long_orh]hatomic_long_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_orasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj}hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjhMubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjvhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh | }(hj$hhhNhNubj)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubjM)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!atomic_long_fetch_or (C function)c.atomic_long_fetch_orhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_fetch_orh]j)}(hatomic_long_fetch_orh]hatomic_long_fetch_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_orasbuh1hhj,ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjbhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh to (}(hjbhhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh | }(hjbhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh) with full ordering.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_or_acquire (C function)c.atomic_long_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjah]hatomic_long_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_acquire() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_or_release (C function)c.atomic_long_fetch_or_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjRhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh to (}(hjRhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh | }(hjRhhhNhNubj)}(h**i**h]hi}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh) with relaxed ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjubjM)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_relaxed() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_xor (C function)c.atomic_long_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_xor (long i, atomic_long_t *v)h]h)}(h.void atomic_long_xor(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMIubh)}(hatomic_long_xorh]j)}(hatomic_long_xorh]hatomic_long_xor}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMIubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]hi}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j)}jsj"sbc.atomic_long_xorasbuh1hhjlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMIubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMIhjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_xor() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubj)}(hhh]jM)}(h long valueh]h long value}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMJhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMJhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjQh]hatomic_long_t *v}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjKubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhMKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_xor (C function)c.atomic_long_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_xor (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_xor(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhjKhM[ubh)}(hatomic_long_fetch_xorh]j)}(hatomic_long_fetch_xorh]hatomic_long_fetch_xor}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhjKhM[ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj`sbc.atomic_long_fetch_xorasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhjKhM[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhjKhM[ubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhM[hj2hhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjhhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhjKhM[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hj1ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjVh]hlong i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjPubj)}(hhh]jM)}(h long valueh]h long value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhM\hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM\hjMubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hj1ubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hj1ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj1ubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj1ubjM)}(hThe original value of **v**.h](hThe original value of }(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_xor_acquire (C function)c.atomic_long_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_xor_acquire (long i, atomic_long_t *v)h]h)}(hlong atomic_long_cmpxchg(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhMubh)}(hatomic_long_cmpxchgh]j)}(hatomic_long_cmpxchgh]hatomic_long_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhMubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong oldh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hnewh]hnew}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhMubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjnhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj:h]hlong new}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_acquire (C function)c.atomic_long_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjjhMubh)}(hatomic_long_cmpxchg_acquireh]j)}(hatomic_long_cmpxchg_acquireh]hatomic_long_cmpxchg_acquire}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjjhMubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnewh]hnew}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjThhhjjhMubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhMhjQhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hjQhhhjjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjnhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh == }(hjnhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh), atomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to }(hjnhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh# with acquire ordering. Otherwise, }(hjnhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh2 is not modified and relaxed ordering is provided.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_release (C function)c.atomic_long_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhjMhMubh)}(hatomic_long_cmpxchg_releaseh]j)}(hatomic_long_cmpxchg_releaseh]hatomic_long_cmpxchg_release}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhjMhMubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjbsbc.atomic_long_cmpxchg_releaseasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hj;hhhjMhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhjMhMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMhj4hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhjMhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjQhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh == }(hjQhhhNhNubj)}(h**old**h]hold}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh), atomically updates }(hjQhhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh to }(hjQhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh# with release ordering. Otherwise, }(hjQhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh2 is not modified and relaxed ordering is provided.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjiubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_relaxed (C function)c.atomic_long_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_relaxed (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hM-ubh)}(hatomic_long_cmpxchg_relaxedh]j)}(hatomic_long_cmpxchg_relaxedh]hatomic_long_cmpxchg_relaxed}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hM-ubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjEsbc.atomic_long_cmpxchg_relaxedasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj0hM-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj0hM-ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hM-hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hj-hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hM-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjLubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjqh]hatomic_long_t *v}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjkubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjhubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjhubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjhubeh}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjLubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh == }(hj4hhhNhNubj)}(h**old**h]hold}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh), atomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to }(hj4hhhNhNubj)}(h**new**h]hnew}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh# with relaxed ordering. Otherwise, }(hj4hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh2 is not modified and relaxed ordering is provided.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjLubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjLubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjLubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_long_try_cmpxchg (C function)c.atomic_long_try_cmpxchghNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMAubh)}(hatomic_long_try_cmpxchgh]j)}(hatomic_long_try_cmpxchgh]hatomic_long_try_cmpxchg}(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj! ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMAubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjF modnameN classnameNjwjz)}j}]j)}jsj' sbc.atomic_long_try_cmpxchgasbuh1hhj= ubjQ)}(h h]h }(hjd hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj= ubj)}(hjh]h*}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9 ubj:)}(h long *oldh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(holdh]hold}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9 ubj:)}(hlong newh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9 ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMAhjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7 jHj7 jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjA h]h Parameters}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj; ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj` h]hatomic_long_t *v}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjZ ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhju hMBhjv ubah}(h]h ]h"]h$]h&]uh1jhjZ ubeh}(h]h ]h"]h$]h&]uh1jhju hMBhjW ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj h]h long *old}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMChj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMChjW ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj h]hlong new}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hlong value to assignh]hlong value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMDhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMDhjW ubeh}(h]h ]h"]h$]h&]uh1jhj; ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj; ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj# hhhNhNubj)}(h**v**h]hv}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh == }(hj# hhhNhNubj)}(h**old**h]hold}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh), atomically updates }(hj# hhhNhNubj)}(h**v**h]hv}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh to }(hj# hhhNhNubj)}(h**new**h]hnew}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh with full ordering. Otherwise, }(hj# hhhNhNubj)}(h**v**h]hv}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh is not modified, }(hj# hhhNhNubj)}(h**old**h]hold}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh$ is updated to the current value of }(hj# hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubh#, and relaxed ordering is provided.}(hj# hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj; ubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.h]hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhj; ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj; ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh if the exchange occurred, }(hj hhhNhNubj)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj; ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_acquire (C function)!c.atomic_long_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_acquire (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj" hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXubjQ)}(h h]h }(hj4 hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj" hhhj3 hMXubh)}(hatomic_long_try_cmpxchg_acquireh]j)}(hatomic_long_try_cmpxchg_acquireh]hatomic_long_try_cmpxchg_acquire}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj" hhhj3 hMXubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjg modnameN classnameNjwjz)}j}]j)}jsjH sb!c.atomic_long_try_cmpxchg_acquireasbuh1hhj^ ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZ ubj:)}(h long *oldh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(holdh]hold}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZ ubj:)}(hlong newh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZ ubeh}(h]h ]h"]h$]h&]jjuh1j3hj" hhhj3 hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj3 hMXubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3 hMXhj hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhj= hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj3 hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjX jHjX jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjb h]h Parameters}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMYhj ubah}(h]h ]h"]h$]h&]uh1jhj{ ubeh}(h]h ]h"]h$]h&]uh1jhj hMYhjx ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj h]h long *old}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMZhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMZhjx ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj h]hlong new}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hlong value to assignh]hlong value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM[hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjx ubeh}(h]h ]h"]h$]h&]uh1jhj\ ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hj\ ubjM)}(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 (}(hjDhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh == }(hjDhhhNhNubj)}(h**old**h]hold}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh), atomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to }(hjDhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh# with acquire ordering. Otherwise, }(hjDhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh is not modified, }(hjDhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh$ is updated to the current value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh#, and relaxed ordering is provided.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hj\ ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj\ ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj\ ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj\ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_release (C function)!c.atomic_long_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjThMnubh)}(hatomic_long_try_cmpxchg_releaseh]j)}(hatomic_long_try_cmpxchg_releaseh]hatomic_long_try_cmpxchg_release}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjThMnubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjisb!c.atomic_long_try_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(h long *oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubeh}(h]h ]h"]h$]h&]jjuh1j3hjChhhjThMnubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjThMnubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjThMnhj<hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj^hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjThMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjh]h long *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hMqhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMqhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj}ubjM)}(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 (}(hjehhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh == }(hjehhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh), atomically updates }(hjehhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh to }(hjehhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh# with release ordering. Otherwise, }(hjehhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh is not modified, }(hjehhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh$ is updated to the current value of }(hjehhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh#, and relaxed ordering is provided.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj}ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj}ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj}ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_relaxed (C function)!c.atomic_long_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjuhMubh)}(hatomic_long_try_cmpxchg_relaxedh]j)}(hatomic_long_try_cmpxchg_relaxedh]hatomic_long_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjuhMubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb!c.atomic_long_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h long *oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hnewh]hnew}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjuhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhjuhMubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMhj]hhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjuhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjh]h long *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj5h]hlong new}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh if the exchange occurred, }(hj:hhhNhNubj)}(h **false**h]hfalse}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh otherwise.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_sub_and_test (C function)c.atomic_long_sub_and_testhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_sub_and_testh]j)}(hatomic_long_sub_and_testh]hatomic_long_sub_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj~hhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj+hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh to (}(hj+hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh - }(hj+hhhNhNubj)}(h**i**h]hi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh) with full ordering.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubjM)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_dec_and_test (C function)c.atomic_long_dec_and_testhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_dec_and_testh]j)}(hatomic_long_dec_and_testh]hatomic_long_dec_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_dec_and_testasbuh1hhj0ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj-hhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh to (}(hj-hhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh - 1) with full ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjqh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_inc_and_test (C function)c.atomic_long_inc_and_testhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_inc_and_testh]j)}(hatomic_long_inc_and_testh]hatomic_long_inc_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_long_inc_and_testasbuh1hhj ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh if the resulting value of }(hjwhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh is zero, }(hjwhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh otherwise.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_add_negative (C function)c.atomic_long_add_negativehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_add_negativeh]j)}(hatomic_long_add_negativeh]hatomic_long_add_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_add_negativeasbuh1hhjDubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj)h]hatomic_long_t *v}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjzhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh to (}(hjzhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh + }(hjzhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh) with full ordering.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_add_negative_acquire (C function)"c.atomic_long_add_negative_acquirehNtauh1hhjhhhNhNubh)}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjThMubh)}(h atomic_long_add_negative_acquireh]j)}(h atomic_long_add_negative_acquireh]h atomic_long_add_negative_acquire}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjThMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjisb"c.atomic_long_add_negative_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubeh}(h]h ]h"]h$]h&]jjuh1j3hjChhhjThMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjThMubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjThMhj<hhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjThMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj_h]hlong i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjYubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(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. hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h **Return**h]j)}(hj? h]hReturn}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubh if the resulting value of }(hjU hhhNhNubj)}(h**v**h]hv}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubh is negative, }(hjU hhhNhNubj)}(h **false**h]hfalse}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubh otherwise.}(hjU hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_add_negative_release (C function)"c.atomic_long_add_negative_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_release (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_release(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(h atomic_long_add_negative_releaseh]j)}(h atomic_long_add_negative_releaseh]h atomic_long_add_negative_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj)!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+!modnameN classnameNjwjz)}j}]j)}jsj sb"c.atomic_long_add_negative_releaseasbuh1hhj"!ubjQ)}(h h]h }(hjI!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"!ubj)}(hjh]h*}(hjW!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"!ubj)}(hjh]hv}(hjd!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj!h]hlong i}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!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]jM)}(hlong value to addh]hlong value to add}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!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]jS)}(hj"h]hatomic_long_t *v}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjM)}(h**Description**h]j)}(hjB"h]h Description}(hjD"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjX"hhhNhNubj)}(h**v**h]hv}(hj`"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX"ubh to (}(hjX"hhhNhNubj)}(h**v**h]hv}(hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX"ubh + }(hjX"hhhNhNubj)}(h**i**h]hi}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX"ubh) with release ordering.}(hjX"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh if the resulting value of }(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh is negative, }(hj"hhhNhNubj)}(h **false**h]hfalse}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh otherwise.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_add_negative_relaxed (C function)"c.atomic_long_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_relaxed (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_relaxed(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj%#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj3#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!#hhhj2#hM ubh)}(h atomic_long_add_negative_relaxedh]j)}(h atomic_long_add_negative_relaxedh]h atomic_long_add_negative_relaxed}(hjE#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!#hhhj2#hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hja#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]#ubjQ)}(h h]h }(hjo#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]#ubj)}(hjh]hi}(hj}#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjY#ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjG#sb"c.atomic_long_add_negative_relaxedasbuh1hhj#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjY#ubeh}(h]h ]h"]h$]h&]jjuh1j3hj!#hhhj2#hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj2#hM ubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2#hM hj#hhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj2#hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj=$h]hlong i}(hj?$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;$ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7$ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjV$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjR$hM hjS$ubah}(h]h ]h"]h$]h&]uh1jhj7$ubeh}(h]h ]h"]h$]h&]uh1jhjR$hM hj4$ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjv$h]hatomic_long_t *v}(hjx$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt$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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hM hj$ubah}(h]h ]h"]h$]h&]uh1jhjp$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hj4$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh + }(hj$hhhNhNubj)}(h**i**h]hi}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$ubjM)}(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.}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj7%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3%ubh if the resulting value of }(hj3%hhhNhNubj)}(h**v**h]hv}(hjI%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3%ubh is negative, }(hj3%hhhNhNubj)}(h **false**h]hfalse}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3%ubh otherwise.}(hj3%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_add_unless (C function)c.atomic_long_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong atomic_long_fetch_add_unless (atomic_long_t *v, long a, long u)h]h)}(hClong atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)h](j)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hMubh)}(hatomic_long_fetch_add_unlessh]j)}(hatomic_long_fetch_add_unlessh]hatomic_long_fetch_add_unless}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%hMubj4)}(h"(atomic_long_t *v, long a, long u)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsj%sbc.atomic_long_fetch_add_unlessasbuh1hhj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hlong ah](j)}(hlongh]hlong}(hj'&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#&ubjQ)}(h h]h }(hj5&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#&ubj)}(hjםh]ha}(hjC&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hlong uh](j)}(hlongh]hlong}(hj[&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW&ubjQ)}(h h]h }(hji&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW&ubj)}(hjlh]hu}(hjw&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj%hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj%hMubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hMhj%hhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhl/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]jS)}(hj&h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hj'h]hlong a}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'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]jM)}(hlong value to addh]hlong value to add}(hj3'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/'hMhj0'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj/'hMhj&ubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjS'h]hlong u}(hjU'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQ'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM'ubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjl'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjh'hMhji'ubah}(h]h ]h"]h$]h&]uh1jhjM'ubeh}(h]h ]h"]h$]h&]uh1jhjh'hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubjM)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj&ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh != }(hj'hhhNhNubj)}(h**u**h]hu}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh), atomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh + }(hj'hhhNhNubj)}(h**a**h]ha}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh!) with full ordering. Otherwise, }(hj'hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh2 is not modified and relaxed ordering is provided.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj&ubjM)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hj&ubjM)}(h **Return**h]j)}(hj0(h]hReturn}(hj2(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj&ubjM)}(hThe original value of **v**.h](hThe original value of }(hjF(hhhNhNubj)}(h**v**h]hv}(hjN(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF(ubh.}(hjF(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_add_unless (C function)c.atomic_long_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h>bool atomic_long_add_unless (atomic_long_t *v, long a, long u)h]h)}(h=bool atomic_long_add_unless(atomic_long_t *v, long a, long u)h](j)}(hjh]hbool}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj(hM1ubh)}(hatomic_long_add_unlessh]j)}(hatomic_long_add_unlessh]hatomic_long_add_unless}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj(hM1ubj4)}(h"(atomic_long_t *v, long a, long u)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj(sbc.atomic_long_add_unlessasbuh1hhj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hlong ah](j)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjQ)}(h h]h }(hj')hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjםh]ha}(hj5)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hlong uh](j)}(hlongh]hlong}(hjM)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI)ubjQ)}(h h]h }(hj[)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjI)ubj)}(hjlh]hu}(hji)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj(hM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj(hhhj(hM1ubah}(h]jz(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hM1hj|(hhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj)hhubah}(h]h ]h"]h$]h&]uh1j3hj|(hhhj(hM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj)ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj)h]hatomic_long_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj)ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hM2hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM2hj)ubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hj *h]hlong a}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj *ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj*ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj%*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!*hM3hj"*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj!*hM3hj)ubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjE*h]hlong u}(hjG*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC*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]jM)}(hlong value to compare withh]hlong value to compare with}(hj^*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZ*hM4hj[*ubah}(h]h ]h"]h$]h&]uh1jhj?*ubeh}(h]h ]h"]h$]h&]uh1jhjZ*hM4hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj)ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh != }(hj*hhhNhNubj)}(h**u**h]hu}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh), atomically updates }(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh to (}(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh + }(hj*hhhNhNubj)}(h**a**h]ha}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh!) with full ordering. Otherwise, }(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh2 is not modified and relaxed ordering is provided.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj)ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hj)ubjM)}(h **Return**h]j)}(hj"+h]hReturn}(hj$+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj +ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hj)ubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj<+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8+ubh if }(hj8+hhhNhNubj)}(h**v**h]hv}(hjN+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8+ubh was updated, }(hj8+hhhNhNubj)}(h **false**h]hfalse}(hj`+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8+ubh otherwise.}(hj8+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_inc_not_zero (C function)c.atomic_long_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj+hMFubh)}(hatomic_long_inc_not_zeroh]j)}(hatomic_long_inc_not_zeroh]hatomic_long_inc_not_zero}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj+hMFubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j)}jsj+sbc.atomic_long_inc_not_zeroasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj+hMFubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhj+hMFubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMFhj+hhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj<,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj9,hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhj+hMFubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjT,jHjT,jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj^,h]h Parameters}(hj`,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjX,ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj},h]hatomic_long_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjw,ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMGhj,ubah}(h]h ]h"]h$]h&]uh1jhjw,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMGhjt,ubah}(h]h ]h"]h$]h&]uh1jhjX,ubjM)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjX,ubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh != 0), atomically updates }(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh% + 1) with full ordering. Otherwise, }(hj,hhhNhNubj)}(h**v**h]hv}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh2 is not modified and relaxed ordering is provided.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjX,ubjM)}(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.}(hj%-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjX,ubjM)}(h **Return**h]j)}(hj6-h]hReturn}(hj8-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjX,ubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjP-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL-ubh if }(hjL-hhhNhNubj)}(h**v**h]hv}(hjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL-ubh was updated, }(hjL-hhhNhNubj)}(h **false**h]hfalse}(hjt-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL-ubh otherwise.}(hjL-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjX,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_inc_unless_negative (C function)!c.atomic_long_inc_unless_negativehNtauh1hhjhhhNhNubh)}(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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj-hMYubh)}(hatomic_long_inc_unless_negativeh]j)}(hatomic_long_inc_unless_negativeh]hatomic_long_inc_unless_negative}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj-hMYubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsj-sb!c.atomic_long_inc_unless_negativeasbuh1hhj-ubjQ)}(h h]h }(hj .hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]hv}(hj'.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubah}(h]h ]h"]h$]h&]jjuh1j3hj-hhhj-hMYubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-hhhj-hMYubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMYhj-hhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjM.hhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhj-hMYubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjh.jHjh.jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjr.h]h Parameters}(hjt.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjl.ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj.h]hatomic_long_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hMZhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMZhj.ubah}(h]h ]h"]h$]h&]uh1jhjl.ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjl.ubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh >= 0), atomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to (}(hj.hhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh% + 1) with full ordering. Otherwise, }(hj.hhhNhNubj)}(h**v**h]hv}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh2 is not modified and relaxed ordering is provided.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjl.ubjM)}(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.}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjl.ubjM)}(h **Return**h]j)}(hjJ/h]hReturn}(hjL/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH/ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjl.ubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjd/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`/ubh if }(hj`/hhhNhNubj)}(h**v**h]hv}(hjv/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`/ubh was updated, }(hj`/hhhNhNubj)}(h **false**h]hfalse}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`/ubh otherwise.}(hj`/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjl.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_dec_unless_positive (C function)!c.atomic_long_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7bool atomic_long_dec_unless_positive (atomic_long_t *v)h]h)}(h6bool atomic_long_dec_unless_positive(atomic_long_t *v)h](j)}(hjh]hbool}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/hhhj/hMlubh)}(hatomic_long_dec_unless_positiveh]j)}(hatomic_long_dec_unless_positiveh]hatomic_long_dec_unless_positive}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/hhhj/hMlubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsj/sb!c.atomic_long_dec_unless_positiveasbuh1hhj/ubjQ)}(h h]h }(hj 0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hj.0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hv}(hj;0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubah}(h]h ]h"]h$]h&]jjuh1j3hj/hhhj/hMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhj/hMlubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hMlhj/hhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjd0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhja0hhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhj/hMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|0jHj|0jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj0ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj0h]hatomic_long_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhj0ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMmhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMmhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj0ubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh <= 0), atomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hj"1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh% - 1) with full ordering. Otherwise, }(hj0hhhNhNubj)}(h**v**h]hv}(hj41hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh2 is not modified and relaxed ordering is provided.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj0ubjM)}(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.}(hjM1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj0ubjM)}(h **Return**h]j)}(hj^1h]hReturn}(hj`1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj0ubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjx1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt1ubh if }(hjt1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt1ubh was updated, }(hjt1hhhNhNubj)}(h **false**h]hfalse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt1ubh otherwise.}(hjt1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_dec_if_positive (C function)c.atomic_long_dec_if_positivehNtauh1hhjhhhNhNubh)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hMubh)}(hatomic_long_dec_if_positiveh]j)}(hatomic_long_dec_if_positiveh]hatomic_long_dec_if_positive}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhj1hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsj1sbc.atomic_long_dec_if_positiveasbuh1hhj2ubjQ)}(h h]h }(hj52hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjC2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hv}(hjP2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 2ubah}(h]h ]h"]h$]h&]jjuh1j3hj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhj1hMubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMhj1hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjy2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjv2hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj2h]hatomic_long_t *v}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj 3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 3ubh > 0), atomically updates }(hj 3hhhNhNubj)}(h**v**h]hv}(hj%3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 3ubh to (}(hj 3hhhNhNubj)}(h**v**h]hv}(hj73hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 3ubh% - 1) with full ordering. Otherwise, }(hj 3hhhNhNubj)}(h**v**h]hv}(hjI3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 3ubh2 is not modified and relaxed ordering is provided.}(hj 3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there.}(hjb3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(h **Return**h]j)}(hjs3h]hReturn}(hju3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hj3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh - 1), regardless of whether }(hj3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh was updated.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_read (C function)c.raw_atomic_readhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'int raw_atomic_read (const atomic_t *v)h]h)}(h&int raw_atomic_read(const atomic_t *v)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubh)}(hraw_atomic_readh]j)}(hraw_atomic_readh]hraw_atomic_read}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hMubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hj h]hconst}(hj4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj4ubjQ)}(h h]h }(hj&4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]j)}(hatomic_th]hatomic_t}(hj74hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj44ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj94modnameN classnameNjwjz)}j}]j)}jsj3sbc.raw_atomic_readasbuh1hhj4ubjQ)}(h h]h }(hjW4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hje4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hjr4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubah}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj3hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj3hMubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hMhj3hhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with relaxed ordering. Safe to use in noinstr code; prefer atomic_read() elsewhere. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hj4h]hconst atomic_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubjM)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj-5hhhNhNubj)}(h**v**h]hv}(hj55hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-5ubh with relaxed ordering.}(hj-5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubjM)}(hhj5ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubh)}(hhh]j)}(hatomic_th]hatomic_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsj5sbc.raw_atomic_read_acquireasbuh1hhj5ubjQ)}(h h]h }(hj16hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj?6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hv}(hjL6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhj5hMubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hMhj5hhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hju6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjr6hhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhj5hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with acquire ordering. Safe to use in noinstr code; prefer atomic_read_acquire() elsewhere. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hj6h]hconst atomic_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh with acquire ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubjM)}(hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.}(hj(7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubjM)}(h **Return**h]j)}(hj97h]hReturn}(hj;7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj77ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjO7hhhNhNubj)}(h**v**h]hv}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO7ubh.}(hjO7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_set (C function)c.raw_atomic_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void raw_atomic_set (atomic_t *v, int i)h]h)}(h'void raw_atomic_set(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hMubh)}(hraw_atomic_seth]j)}(hraw_atomic_seth]hraw_atomic_set}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hMubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsj7sbc.raw_atomic_setasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]hv}(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hint ih](j)}(hinth]hint}(hj#8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjQ)}(h h]h }(hj18hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]hi}(hj?8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhj7hMubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMhj7hhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjh8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhje8hhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhj7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Safe to use in noinstr code; prefer atomic_set() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj8h]h atomic_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hj8h]hint i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj39hhhNhNubj)}(h**v**h]hv}(hj;9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj39ubh to }(hj39hhhNhNubj)}(h**i**h]hi}(hjM9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj39ubh with relaxed ordering.}(hj39hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(h;Safe to use in noinstr code; prefer atomic_set() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_set() elsewhere.}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(h **Return**h]j)}(hjw9h]hReturn}(hjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(hNothing.h]hNothing.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic_set_release (C function)c.raw_atomic_set_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h0void raw_atomic_set_release (atomic_t *v, int i)h]h)}(h/void raw_atomic_set_release(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhj9hMubh)}(hraw_atomic_set_releaseh]j)}(hraw_atomic_set_releaseh]hraw_atomic_set_release}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhj9hMubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsj9sbc.raw_atomic_set_releaseasbuh1hhj9ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hj*:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hv}(hj7:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(hint ih](j)}(hinth]hint}(hjO:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK:ubjQ)}(h h]h }(hj]:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK:ubj)}(hjh]hi}(hjk:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhj9hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj9hMubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMhj9hhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj9hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with release ordering. Safe to use in noinstr code; prefer atomic_set_release() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj:h]h atomic_t *v}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj: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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj:ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hj;h]hint i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ;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]jM)}(hint value to assignh]hint value to assign}(hj';hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#;hMhj$;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj#;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hjI;h]h Description}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj_;hhhNhNubj)}(h**v**h]hv}(hjg;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_;ubh to }(hj_;hhhNhNubj)}(h**i**h]hi}(hjy;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_;ubh with release ordering.}(hj_;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(hNothing.h]hNothing.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_add (C function)c.raw_atomic_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void raw_atomic_add (int i, atomic_t *v)h]h)}(h'void raw_atomic_add(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhj;hMubh)}(hraw_atomic_addh]j)}(hraw_atomic_addh]hraw_atomic_add}(hj <hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhj;hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj%<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubjQ)}(h h]h }(hj3<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!<ubj)}(hjh]hi}(hjA<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj\<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^<modnameN classnameNjwjz)}j}]j)}jsj <sbc.raw_atomic_addasbuh1hhjU<ubjQ)}(h h]h }(hj|<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hj;hhhj;hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhj;hMubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;hMhj;hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhj;hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(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. Safe to use in noinstr code; prefer atomic_add() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhm/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 add h](j)}(h ``int i``h]jS)}(hj=h]hint i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<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]jM)}(hint value to addh]hint value to add}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=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]jS)}(hj:=h]h atomic_t *v}(hj<=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8=ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj4=ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjS=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjO=hMhjP=ubah}(h]h ]h"]h$]h&]uh1jhj4=ubeh}(h]h ]h"]h$]h&]uh1jhjO=hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hju=h]h Description}(hjw=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh + }(hj=hhhNhNubj)}(h**i**h]hi}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubjM)}(h;Safe to use in noinstr code; prefer atomic_add() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_add() elsewhere.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubjM)}(hNothing.h]hNothing.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_add_return (C function)c.raw_atomic_add_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.int raw_atomic_add_return (int i, atomic_t *v)h]h)}(h-int raw_atomic_add_return(int i, atomic_t *v)h](j)}(hinth]hint}(hj&>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj">hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&ubjQ)}(h h]h }(hj5>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj">hhhj4>hM&ubh)}(hraw_atomic_add_returnh]j)}(hraw_atomic_add_returnh]hraw_atomic_add_return}(hjG>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj">hhhj4>hM&ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjc>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_>ubjQ)}(h h]h }(hjq>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_>ubj)}(hjh]hi}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[>ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsjI>sbc.raw_atomic_add_returnasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[>ubeh}(h]h ]h"]h$]h&]jjuh1j3hj">hhhj4>hM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj4>hM&ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4>hM&hj>hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hj>hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj4>hM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_add_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj ?h]h Parameters}(hj"?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj?ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj??h]hint i}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hj9?ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjX?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjT?hM'hjU?ubah}(h]h ]h"]h$]h&]uh1jhj9?ubeh}(h]h ]h"]h$]h&]uh1jhjT?hM'hj6?ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjx?h]h atomic_t *v}(hjz?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjv?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjr?ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM(hj?ubah}(h]h ]h"]h$]h&]uh1jhjr?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM(hj6?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj?ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh to (}(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh + }(hj?hhhNhNubj)}(h**i**h]hi}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh) with full ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hj?ubjM)}(hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hj?ubjM)}(h **Return**h]j)}(hj@h]hReturn}(hj!@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hj?ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj5@hhhNhNubj)}(h**v**h]hv}(hj=@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5@ubh.}(hj5@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_add_return_acquire (C function)c.raw_atomic_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjv@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr@hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjr@hhhj@hMAubh)}(hraw_atomic_add_return_acquireh]j)}(hraw_atomic_add_return_acquireh]hraw_atomic_add_return_acquire}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjr@hhhj@hMAubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]hi}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsj@sbc.raw_atomic_add_return_acquireasbuh1hhj@ubjQ)}(h h]h }(hj AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hv}(hj%AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hjr@hhhj@hMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjn@hhhj@hMAubah}(h]ji@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hMAhjk@hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjNAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjKAhhubah}(h]h ]h"]h$]h&]uh1j3hjk@hhhj@hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjfAjHjfAjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjpAh]h Parameters}(hjrAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjjAubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjAh]hint i}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjAubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMBhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMBhjAubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjAh]h atomic_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjAubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMChjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMChjAubeh}(h]h ]h"]h$]h&]uh1jhjjAubjM)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjjAubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjBhhhNhNubj)}(h**v**h]hv}(hj!BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh to (}(hjBhhhNhNubj)}(h**v**h]hv}(hj3BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh + }(hjBhhhNhNubj)}(h**i**h]hi}(hjEBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh) with acquire ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjjAubjM)}(hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.}(hj^BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjjAubjM)}(h **Return**h]j)}(hjoBh]hReturn}(hjqBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmBubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMHhjjAubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhjjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_add_return_release (C function)c.raw_atomic_add_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_release (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjBhM\ubh)}(hraw_atomic_add_return_releaseh]j)}(hraw_atomic_add_return_releaseh]hraw_atomic_add_return_release}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjBhM\ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]hi}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj:ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Cubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj;Hhhubah}(h]h ]h"]h$]h&]uh1j3hj[GhhhjtGhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVHjHjVHjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj`Hh]h Parameters}(hjbHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Hubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjHh]hint i}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}Hubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyHubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjyHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjvHubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjHh]h atomic_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjvHubeh}(h]h ]h"]h$]h&]uh1jhjZHubjM)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj IhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Iubh to (}(hj IhhhNhNubj)}(h**v**h]hv}(hj#IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Iubh + }(hj IhhhNhNubj)}(h**i**h]hi}(hj5IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Iubh) with full ordering.}(hj IhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.}(hjNIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubjM)}(h **Return**h]j)}(hj_Ih]hReturn}(hjaIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Iubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubjM)}(hThe original value of **v**.h](hThe original value of }(hjuIhhhNhNubj)}(h**v**h]hv}(hj}IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuIubh.}(hjuIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_add_acquire (C function)c.raw_atomic_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIhhhjIhMubh)}(hraw_atomic_fetch_add_acquireh]j)}(hraw_atomic_fetch_add_acquireh]hraw_atomic_fetch_add_acquire}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1hhjIhhhjIhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]hi}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj*JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Jubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,JmodnameN classnameNjwjz)}j}]j)}jsjIsbc.raw_atomic_fetch_add_acquireasbuh1hhj#JubjQ)}(h h]h }(hjJJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#Jubj)}(hjh]h*}(hjXJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Jubj)}(hjh]hv}(hjeJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Jubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubeh}(h]h ]h"]h$]h&]jjuh1j3hjIhhhjIhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhjIhMubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhMhjIhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjIhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjJh]hint i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjKh]h atomic_t *v}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjKubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj!KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjM)}(h**Description**h]j)}(hjCKh]h Description}(hjEKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAKubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjYKhhhNhNubj)}(h**v**h]hv}(hjaKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYKubh to (}(hjYKhhhNhNubj)}(h**v**h]hv}(hjsKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYKubh + }(hjYKhhhNhNubj)}(h**i**h]hi}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYKubh) with acquire ordering.}(hjYKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_add_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_acquire() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubjM)}(hThe original value of **v**.h](hThe original value of }(hjKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_add_release (C function)c.raw_atomic_fetch_add_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_add_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_add_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhjLhMubh)}(hraw_atomic_fetch_add_releaseh]j)}(hraw_atomic_fetch_add_releaseh]hraw_atomic_fetch_add_release}(hj'LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Lubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhjLhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjCLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?LubjQ)}(h h]h }(hjQLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?Lubj)}(hjh]hi}(hj_LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Lubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;Lubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjzLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|LmodnameN classnameNjwjz)}j}]j)}jsj)Lsbc.raw_atomic_fetch_add_releaseasbuh1hhjsLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsLubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;Lubeh}(h]h ]h"]h$]h&]jjuh1j3hjLhhhjLhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjLhMubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhMhjKhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjLhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjMh]hint i}(hj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj8MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4MhMhj5Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj4MhMhjMubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXMh]h atomic_t *v}(hjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjRMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjqMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmMhMhjnMubah}(h]h ]h"]h$]h&]uh1jhjRMubeh}(h]h ]h"]h$]h&]uh1jhjmMhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh to (}(hjMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh + }(hjMhhhNhNubj)}(h**i**h]hi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh) with release ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(hThe original value of **v**.h](hThe original value of }(hjNhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_add_relaxed (C function)c.raw_atomic_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_add_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_add_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjVNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRNhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjeNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRNhhhjdNhMubh)}(hraw_atomic_fetch_add_relaxedh]j)}(hraw_atomic_fetch_add_relaxedh]hraw_atomic_fetch_add_relaxed}(hjwNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsNubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRNhhhjdNhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]hi}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjyNsbc.raw_atomic_fetch_add_relaxedasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjRNhhhjdNhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNNhhhjdNhMubah}(h]jINah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdNhMhjKNhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj.OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+Ohhubah}(h]h ]h"]h$]h&]uh1j3hjKNhhhjdNhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFOjHjFOjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjPOh]h Parameters}(hjROhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjoOh]hint i}(hjqOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiOubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjiOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjfOubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjOh]h atomic_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjfOubeh}(h]h ]h"]h$]h&]uh1jhjJOubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh + }(hjOhhhNhNubj)}(h**i**h]hi}(hj%PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh) with relaxed ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere.}(hj>PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubjM)}(h **Return**h]j)}(hjOPh]hReturn}(hjQPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMPubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubjM)}(hThe original value of **v**.h](hThe original value of }(hjePhhhNhNubj)}(h**v**h]hv}(hjmPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjePubh.}(hjePhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_sub (C function)c.raw_atomic_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void raw_atomic_sub (int i, atomic_t *v)h]h)}(h'void raw_atomic_sub(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhMubh)}(hraw_atomic_subh]j)}(hraw_atomic_subh]hraw_atomic_sub}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]hi}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjPsbc.raw_atomic_subasbuh1hhjQubjQ)}(h h]h }(hj:QhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjHQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjUQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMhjPhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj~QhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{Qhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjQjHjQjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_sub() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjQh]hint i}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjQh]h atomic_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.h7hMhjQubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj RhMhjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj RhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubjM)}(h**Description**h]j)}(hj3Rh]h Description}(hj5RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Rubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjIRhhhNhNubj)}(h**v**h]hv}(hjQRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIRubh to (}(hjIRhhhNhNubj)}(h**v**h]hv}(hjcRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIRubh - }(hjIRhhhNhNubj)}(h**i**h]hi}(hjuRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIRubh) with relaxed ordering.}(hjIRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(hNothing.h]hNothing.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_sub_return (C function)c.raw_atomic_sub_returnhNtauh1hhjhhhNhNubh)}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhjRhMubh)}(hraw_atomic_sub_returnh]j)}(hraw_atomic_sub_returnh]hraw_atomic_sub_return}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhjRhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj!ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hj/ShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]hi}(hj=ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjXShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZSmodnameN classnameNjwjz)}j}]j)}jsjSsbc.raw_atomic_sub_returnasbuh1hhjQSubjQ)}(h h]h }(hjxShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQSubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubeh}(h]h ]h"]h$]h&]jjuh1j3hjRhhhjRhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjRhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhMhjRhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjRhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjSh]hint i}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj6Th]h atomic_t *v}(hj8ThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4Tubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0Tubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjOThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKThMhjLTubah}(h]h ]h"]h$]h&]uh1jhj0Tubeh}(h]h ]h"]h$]h&]uh1jhjKThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjqTh]h Description}(hjsThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh - }(hjThhhNhNubj)}(h**i**h]hi}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh) with full ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubjM)}(hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_sub_return_acquire (C function)c.raw_atomic_sub_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hj4UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Uhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjCUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0UhhhjBUhM ubh)}(hraw_atomic_sub_return_acquireh]j)}(hraw_atomic_sub_return_acquireh]hraw_atomic_sub_return_acquire}(hjUUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQUubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0UhhhjBUhM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjqUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmUubj)}(hjh]hi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiUubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjWUsbc.raw_atomic_sub_return_acquireasbuh1hhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiUubeh}(h]h ]h"]h$]h&]jjuh1j3hj0UhhhjBUhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,UhhhjBUhM ubah}(h]j'Uah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBUhM hj)Uhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Vhhubah}(h]h ]h"]h$]h&]uh1j3hj)UhhhjBUhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$VjHj$VjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj.Vh]h Parameters}(hj0VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Vubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj(Vubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjMVh]hint i}(hjOVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjGVubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjfVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbVhM!hjcVubah}(h]h ]h"]h$]h&]uh1jhjGVubeh}(h]h ]h"]h$]h&]uh1jhjbVhM!hjDVubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjVh]h atomic_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjVubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhM"hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM"hjDVubeh}(h]h ]h"]h$]h&]uh1jhj(VubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj(VubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh - }(hjVhhhNhNubj)}(h**i**h]hi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with acquire ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hj(VubjM)}(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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hj(VubjM)}(h **Return**h]j)}(hj-Wh]hReturn}(hj/WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Wubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hj(VubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjCWhhhNhNubj)}(h**v**h]hv}(hjKWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCWubh.}(hjCWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hj(Vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_sub_return_release (C function)c.raw_atomic_sub_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhM;ubh)}(hraw_atomic_sub_return_releaseh]j)}(hraw_atomic_sub_return_releaseh]hraw_atomic_sub_return_release}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjWhM;ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]hi}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjWsbc.raw_atomic_sub_return_releaseasbuh1hhjWubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hj&XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hv}(hj3XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhjWhM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|WhhhjWhM;ubah}(h]jwWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhM;hjyWhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj\XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjYXhhubah}(h]h ]h"]h$]h&]uh1j3hjyWhhhjWhM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjtXjHjtXjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj~Xh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Xubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjxXubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjXh]hint i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(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]jM)}(hint value to subtracth]hint value to subtract}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhM<hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhM<hjXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhM=hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhM=hjXubeh}(h]h ]h"]h$]h&]uh1jhjxXubjM)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjxXubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj'YhhhNhNubj)}(h**v**h]hv}(hj/YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Yubh to (}(hj'YhhhNhNubj)}(h**v**h]hv}(hjAYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Yubh - }(hj'YhhhNhNubj)}(h**i**h]hi}(hjSYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Yubh) with release ordering.}(hj'YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjxXubjM)}(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.}(hjlYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjxXubjM)}(h **Return**h]j)}(hj}Yh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Yubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjxXubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjxXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_sub_return_relaxed (C function)c.raw_atomic_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMUubh)}(hraw_atomic_sub_return_relaxedh]j)}(hraw_atomic_sub_return_relaxedh]hraw_atomic_sub_return_relaxed}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMUubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Zubj)}(hjh]hi}(hj-ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Zubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Zubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjHZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.raw_atomic_sub_return_relaxedasbuh1hhjAZubjQ)}(h h]h }(hjhZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAZubj)}(hjh]h*}(hjvZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAZubj)}(hjh]hv}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Zubeh}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjYhMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjYhMUubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhMUhjYhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjZubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjZh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjZubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMVhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMVhjZubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj&[h]h atomic_t *v}(hj([hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$[ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhj [ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj?[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;[hMWhj<[ubah}(h]h ]h"]h$]h&]uh1jhj [ubeh}(h]h ]h"]h$]h&]uh1jhj;[hMWhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubjM)}(h**Description**h]j)}(hja[h]h Description}(hjc[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_[ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjZubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjw[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw[ubh to (}(hjw[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw[ubh - }(hjw[hhhNhNubj)}(h**i**h]hi}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw[ubh) with relaxed ordering.}(hjw[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjZubjM)}(hJSafe to use in noinstr code; prefer atomic_sub_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_sub_return_relaxed() elsewhere.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjZubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjZubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_sub (C function)c.raw_atomic_fetch_subhNtauh1hhjhhhNhNubh)}(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}(hj$\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlubjQ)}(h h]h }(hj3\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj \hhhj2\hMlubh)}(hraw_atomic_fetch_subh]j)}(hraw_atomic_fetch_subh]hraw_atomic_fetch_sub}(hjE\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj \hhhj2\hMlubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hja\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]\ubjQ)}(h h]h }(hjo\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]\ubj)}(hjh]hi}(hj}\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjY\ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j)}jsjG\sbc.raw_atomic_fetch_subasbuh1hhj\ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjY\ubeh}(h]h ]h"]h$]h&]jjuh1j3hj \hhhj2\hMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhj2\hMlubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2\hMlhj\hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhj\hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhj2\hMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj=]h]hint i}(hj?]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj7]ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjV]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjR]hMmhjS]ubah}(h]h ]h"]h$]h&]uh1jhj7]ubeh}(h]h ]h"]h$]h&]uh1jhjR]hMmhj4]ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjv]h]h atomic_t *v}(hjx]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjp]ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMnhj]ubah}(h]h ]h"]h$]h&]uh1jhjp]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMnhj4]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj]ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh to (}(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh - }(hj]hhhNhNubj)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh) with full ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohj]ubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.}(hj ^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj]ubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMshj]ubjM)}(hThe original value of **v**.h](hThe original value of }(hj3^hhhNhNubj)}(h**v**h]hv}(hj;^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3^ubh.}(hj3^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_sub_acquire (C function)c.raw_atomic_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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}(hjt^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp^hhhj^hMubh)}(hraw_atomic_fetch_sub_acquireh]j)}(hraw_atomic_fetch_sub_acquireh]hraw_atomic_fetch_sub_acquire}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjp^hhhj^hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]hi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsj^sbc.raw_atomic_fetch_sub_acquireasbuh1hhj^ubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]hv}(hj#_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubeh}(h]h ]h"]h$]h&]jjuh1j3hjp^hhhj^hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjl^hhhj^hMubah}(h]jg^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^hMhji^hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjL_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjI_hhubah}(h]h ]h"]h$]h&]uh1j3hji^hhhj^hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjd_jHjd_jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjn_h]h Parameters}(hjp_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl_ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj_h]hint i}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_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]jM)}(hint value to subtracth]hint value to subtract}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_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]jS)}(hj_h]h atomic_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhjh_ubjM)}(h**Description**h]j)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh to (}(hj`hhhNhNubj)}(h**v**h]hv}(hj1`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh - }(hj`hhhNhNubj)}(h**i**h]hi}(hjC`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh) with acquire ordering.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubjM)}(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.}(hj\`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubjM)}(h **Return**h]j)}(hjm`h]hReturn}(hjo`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk`ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjh_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_sub_release (C function)c.raw_atomic_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_sub_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_sub_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhj`hMubh)}(hraw_atomic_fetch_sub_releaseh]j)}(hraw_atomic_fetch_sub_releaseh]hraw_atomic_fetch_sub_release}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhj`hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]hi}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj8ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5aubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:amodnameN classnameNjwjz)}j}]j)}jsj`sbc.raw_atomic_fetch_sub_releaseasbuh1hhj1aubjQ)}(h h]h }(hjXahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1aubj)}(hjh]h*}(hjfahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1aubj)}(hjh]hv}(hjsahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1aubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj`hhhj`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hMubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMhj`hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjahhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjah]hint i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjbh]h atomic_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj/bhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+bhMhj,bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj+bhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubjM)}(h**Description**h]j)}(hjQbh]h Description}(hjSbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjObubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjgbhhhNhNubj)}(h**v**h]hv}(hjobhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgbubh to (}(hjgbhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgbubh - }(hjgbhhhNhNubj)}(h**i**h]hi}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgbubh) with release ordering.}(hjgbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubjM)}(h **Return**h]j)}(hjbh]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubjM)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_sub_relaxed (C function)c.raw_atomic_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj#chhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhj"chMubh)}(hraw_atomic_fetch_sub_relaxedh]j)}(hraw_atomic_fetch_sub_relaxedh]hraw_atomic_fetch_sub_relaxed}(hj5chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1cubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhj"chMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjQchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMcubjQ)}(h h]h }(hj_chhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMcubj)}(hjh]hi}(hjmchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIcubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsj7csbc.raw_atomic_fetch_sub_relaxedasbuh1hhjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hv}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIcubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhj"chMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj chhhj"chMubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"chMhj chhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjchhubah}(h]h ]h"]h$]h&]uh1j3hj chhhj"chMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj dubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj-dh]hint i}(hj/dhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+dubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj'dubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjFdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBdhMhjCdubah}(h]h ]h"]h$]h&]uh1jhj'dubeh}(h]h ]h"]h$]h&]uh1jhjBdhMhj$dubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjfdh]h atomic_t *v}(hjhdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjddubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`dubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{dhMhj|dubah}(h]h ]h"]h$]h&]uh1jhj`dubeh}(h]h ]h"]h$]h&]uh1jhj{dhMhj$dubeh}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjdhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh to (}(hjdhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh - }(hjdhhhNhNubj)}(h**i**h]hi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh) with relaxed ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(h **Return**h]j)}(hj eh]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj eubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(hThe original value of **v**.h](hThe original value of }(hj#ehhhNhNubj)}(h**v**h]hv}(hj+ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#eubh.}(hj#ehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_inc (C function)c.raw_atomic_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void raw_atomic_inc (atomic_t *v)h]h)}(h void raw_atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hjdehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjsehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ehhhjrehMubh)}(hraw_atomic_inch]j)}(hraw_atomic_inch]hraw_atomic_inc}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`ehhhjrehMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsjesbc.raw_atomic_incasbuh1hhjeubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]hv}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjeubah}(h]h ]h"]h$]h&]jjuh1j3hj`ehhhjrehMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\ehhhjrehMubah}(h]jWeah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrehMhjYehhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1j3hjYehhhjrehMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj fjHj fjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*fh]h Parameters}(hj,fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(fubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjIfh]h atomic_t *v}(hjKfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjCfubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjbfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^fhMhj_fubah}(h]h ]h"]h$]h&]uh1jhjCfubeh}(h]h ]h"]h$]h&]uh1jhj^fhMhj@fubah}(h]h ]h"]h$]h&]uh1jhj$fubjM)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjfhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh to (}(hjfhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh + 1) with relaxed ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubjM)}(h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubjM)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubjM)}(hNothing.h]hNothing.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_inc_return (C function)c.raw_atomic_inc_returnhNtauh1hhjhhhNhNubh)}(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}(hj#ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj2ghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhj1ghMubh)}(hraw_atomic_inc_returnh]j)}(hraw_atomic_inc_returnh]hraw_atomic_inc_return}(hjDghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@gubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhj1ghMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjcghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjegmodnameN classnameNjwjz)}j}]j)}jsjFgsbc.raw_atomic_inc_returnasbuh1hhj\gubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\gubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\gubj)}(hjh]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\gubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXgubah}(h]h ]h"]h$]h&]jjuh1j3hjghhhj1ghMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhj1ghMubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1ghMhjghhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hjghhhj1ghMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.h hMhjgubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjhh]h atomic_t *v}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj!hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjChh]h Description}(hjEhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAhubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjYhhhhNhNubj)}(h**v**h]hv}(hjahhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYhubh to (}(hjYhhhhNhNubj)}(h**v**h]hv}(hjshhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYhubh + 1) with full ordering.}(hjYhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubjM)}(hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubjM)}(h **Return**h]j)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_inc_return_acquire (C function)c.raw_atomic_inc_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjihMubh)}(hraw_atomic_inc_return_acquireh]j)}(hraw_atomic_inc_return_acquireh]hraw_atomic_inc_return_acquire}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjihMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj4ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1iubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6imodnameN classnameNjwjz)}j}]j)}jsjisbc.raw_atomic_inc_return_acquireasbuh1hhj-iubjQ)}(h h]h }(hjTihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-iubj)}(hjh]h*}(hjbihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-iubj)}(hjh]hv}(hjoihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-iubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)iubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjihMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjihMubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihMhjhhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjihMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjih]h atomic_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj*jhhhNhNubj)}(h**v**h]hv}(hj2jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*jubh to (}(hj*jhhhNhNubj)}(h**v**h]hv}(hjDjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*jubh + 1) with acquire ordering.}(hj*jhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(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.}(hj]jhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h **Return**h]j)}(hjnjh]hReturn}(hjpjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjljubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_inc_return_release (C function)c.raw_atomic_inc_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhjjhMubh)}(hraw_atomic_inc_return_releaseh]j)}(hraw_atomic_inc_return_releaseh]hraw_atomic_inc_return_release}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhjjhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsjjsbc.raw_atomic_inc_return_releaseasbuh1hhjjubjQ)}(h h]h }(hj%khhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hj3khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hv}(hj@khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubah}(h]h ]h"]h$]h&]jjuh1j3hjjhhhjjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjjhMubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhMhjjhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjikhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfkhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjkh]h atomic_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjkhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh to (}(hjkhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh + 1) with release ordering.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubjM)}(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.}(hj.lhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubjM)}(h **Return**h]j)}(hj?lh]hReturn}(hjAlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=lubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjkubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjUlhhhNhNubj)}(h**v**h]hv}(hj]lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUlubh.}(hjUlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_inc_return_relaxed (C function)c.raw_atomic_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlhhhjlhM4ubh)}(hraw_atomic_inc_return_relaxedh]j)}(hraw_atomic_inc_return_relaxedh]hraw_atomic_inc_return_relaxed}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhjlhM4ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlmodnameN classnameNjwjz)}j}]j)}jsjlsbc.raw_atomic_inc_return_relaxedasbuh1hhjlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubah}(h]h ]h"]h$]h&]jjuh1j3hjlhhhjlhM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlhhhjlhM4ubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlhM4hjlhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj:mhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hj7mhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjlhM4ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRmjHjRmjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj\mh]h Parameters}(hj^mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjVmubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj{mh]h atomic_t *v}(hj}mhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjymubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5hjumubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM5hjmubah}(h]h ]h"]h$]h&]uh1jhjumubeh}(h]h ]h"]h$]h&]uh1jhjmhM5hjrmubah}(h]h ]h"]h$]h&]uh1jhjVmubjM)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjVmubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh to (}(hjmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh + 1) with relaxed ordering.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjVmubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjVmubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjVmubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj&nhhhNhNubj)}(h**v**h]hv}(hj.nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&nubh.}(hj&nhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjVmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_inc (C function)c.raw_atomic_fetch_inchNtauh1hhjhhhNhNubh)}(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}(hjgnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcnhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hjvnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcnhhhjunhMJubh)}(hraw_atomic_fetch_inch]j)}(hraw_atomic_fetch_inch]hraw_atomic_fetch_inc}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhjcnhhhjunhMJubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsjnsbc.raw_atomic_fetch_incasbuh1hhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubah}(h]h ]h"]h$]h&]jjuh1j3hjcnhhhjunhMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_nhhhjunhMJubah}(h]jZnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjunhMJhj\nhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjohhubah}(h]h ]h"]h$]h&]uh1j3hj\nhhhjunhMJubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#ojHj#ojIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj-oh]h Parameters}(hj/ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+oubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj'oubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjLoh]h atomic_t *v}(hjNohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJoubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhjFoubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjeohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjaohMKhjboubah}(h]h ]h"]h$]h&]uh1jhjFoubeh}(h]h ]h"]h$]h&]uh1jhjaohMKhjCoubah}(h]h ]h"]h$]h&]uh1jhj'oubjM)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhj'oubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh to (}(hjohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh + 1) with full ordering.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhj'oubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj'oubjM)}(h **Return**h]j)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhj'oubjM)}(hThe original value of **v**.h](hThe original value of }(hjohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhj'oubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_inc_acquire (C function)c.raw_atomic_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(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}(hj8phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4phhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hjGphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4phhhjFphMdubh)}(hraw_atomic_fetch_inc_acquireh]j)}(hraw_atomic_fetch_inc_acquireh]hraw_atomic_fetch_inc_acquire}(hjYphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUpubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4phhhjFphMdubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjxphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjupubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzpmodnameN classnameNjwjz)}j}]j)}jsj[psbc.raw_atomic_fetch_inc_acquireasbuh1hhjqpubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqpubj)}(hjh]hv}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmpubah}(h]h ]h"]h$]h&]jjuh1j3hj4phhhjFphMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0phhhjFphMdubah}(h]j+pah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFphMdhj-phhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjphhubah}(h]h ]h"]h$]h&]uh1j3hj-phhhjFphMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjph]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjpubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjqh]h atomic_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjqubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2qhMehj3qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhj2qhMehjqubah}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hjXqh]h Description}(hjZqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVqubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjpubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjnqhhhNhNubj)}(h**v**h]hv}(hjvqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnqubh to (}(hjnqhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnqubh + 1) with acquire ordering.}(hjnqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjpubjM)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjpubjM)}(h **Return**h]j)}(hjqh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjpubjM)}(hThe original value of **v**.h](hThe original value of }(hjqhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_inc_release (C function)c.raw_atomic_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(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}(hj rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~ubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjrhM~ubh)}(hraw_atomic_fetch_inc_releaseh]j)}(hraw_atomic_fetch_inc_releaseh]hraw_atomic_fetch_inc_release}(hj*rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&rubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjrhM~ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjIrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKrmodnameN classnameNjwjz)}j}]j)}jsj,rsbc.raw_atomic_fetch_inc_releaseasbuh1hhjBrubjQ)}(h h]h }(hjirhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBrubj)}(hjh]h*}(hjwrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBrubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>rubah}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjrhM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjrhM~ubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhM~hjqhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjrhhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjrhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjrh]h atomic_t *v}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hj)sh]h Description}(hj+shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'subah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj?shhhNhNubj)}(h**v**h]hv}(hjGshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?subh to (}(hj?shhhNhNubj)}(h**v**h]hv}(hjYshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?subh + 1) with release ordering.}(hj?shhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(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.}(hjrshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(hThe original value of **v**.h](hThe original value of }(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_inc_relaxed (C function)c.raw_atomic_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjshMubh)}(hraw_atomic_fetch_inc_relaxedh]j)}(hraw_atomic_fetch_inc_relaxedh]hraw_atomic_fetch_inc_relaxed}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjshMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsjssbc.raw_atomic_fetch_inc_relaxedasbuh1hhjtubjQ)}(h h]h }(hj:thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjHthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hv}(hjUthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubah}(h]h ]h"]h$]h&]jjuh1j3hjshhhjshMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjshMubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMhjshhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj~thhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{thhubah}(h]h ]h"]h$]h&]uh1j3hjshhhjshMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjtjHjtjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjth]h atomic_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to (}(hjuhhhNhNubj)}(h**v**h]hv}(hj*uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh + 1) with relaxed ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(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.}(hjCuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(h **Return**h]j)}(hjTuh]hReturn}(hjVuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRuubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(hThe original value of **v**.h](hThe original value of }(hjjuhhhNhNubj)}(h**v**h]hv}(hjruhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjuubh.}(hjjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_dec (C function)c.raw_atomic_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void raw_atomic_dec (atomic_t *v)h]h)}(h void raw_atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjuhMubh)}(hraw_atomic_dech]j)}(hraw_atomic_dech]hraw_atomic_dec}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjuhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j)}jsjusbc.raw_atomic_decasbuh1hhjuubjQ)}(h h]h }(hj vhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]hv}(hj&vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjuubah}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjuhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhjuhMubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMhjuhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjOvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLvhhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhjuhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgvjHjgvjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjqvh]h Parameters}(hjsvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjovubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjvh]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjkvubjM)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to (}(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh - 1) with relaxed ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubjM)}(h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubjM)}(h **Return**h]j)}(hj%wh]hReturn}(hj'whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#wubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubjM)}(hNothing.h]hNothing.}(hj;whhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_dec_return (C function)c.raw_atomic_dec_returnhNtauh1hhjhhhNhNubh)}(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}(hjjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfwhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjywhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfwhhhjxwhMubh)}(hraw_atomic_dec_returnh]j)}(hraw_atomic_dec_returnh]hraw_atomic_dec_return}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfwhhhjxwhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjwsbc.raw_atomic_dec_returnasbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hjfwhhhjxwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbwhhhjxwhMubah}(h]j]wah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxwhMhj_whhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj xhhubah}(h]h ]h"]h$]h&]uh1j3hj_whhhjxwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&xjHj&xjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj0xh]h Parameters}(hj2xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.xubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjOxh]h atomic_t *v}(hjQxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMxubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIxubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdxhMhjexubah}(h]h ]h"]h$]h&]uh1jhjIxubeh}(h]h ]h"]h$]h&]uh1jhjdxhMhjFxubah}(h]h ]h"]h$]h&]uh1jhj*xubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh - 1) with full ordering.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubjM)}(hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjxhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_dec_return_acquire (C function)c.raw_atomic_dec_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hj;yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7yhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjJyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7yhhhjIyhMubh)}(hraw_atomic_dec_return_acquireh]j)}(hraw_atomic_dec_return_acquireh]hraw_atomic_dec_return_acquire}(hj\yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXyubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7yhhhjIyhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj{yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}ymodnameN classnameNjwjz)}j}]j)}jsj^ysbc.raw_atomic_dec_return_acquireasbuh1hhjtyubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtyubj)}(hjh]hv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpyubah}(h]h ]h"]h$]h&]jjuh1j3hj7yhhhjIyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3yhhhjIyhMubah}(h]j.yah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIyhMhj0yhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyhhubah}(h]h ]h"]h$]h&]uh1j3hj0yhhhjIyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj zh]h atomic_t *v}(hj"zhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj9zhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5zhMhj6zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj5zhMhjzubah}(h]h ]h"]h$]h&]uh1jhjyubjM)}(h**Description**h]j)}(hj[zh]h Description}(hj]zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYzubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjqzhhhNhNubj)}(h**v**h]hv}(hjyzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqzubh to (}(hjqzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqzubh - 1) with acquire ordering.}(hjqzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubjM)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubjM)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_dec_return_release (C function)c.raw_atomic_dec_return_releasehNtauh1hhjhhhNhNubh)}(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}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhj{hMubh)}(hraw_atomic_dec_return_releaseh]j)}(hraw_atomic_dec_return_releaseh]hraw_atomic_dec_return_release}(hj-{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj){ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhj{hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjL{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjN{modnameN classnameNjwjz)}j}]j)}jsj/{sbc.raw_atomic_dec_return_releaseasbuh1hhjE{ubjQ)}(h h]h }(hjl{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjE{ubj)}(hjh]h*}(hjz{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE{ubj)}(hjh]hv}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjA{ubah}(h]h ]h"]h$]h&]jjuh1j3hj{hhhj{hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhj{hMubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMhj{hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1j3hj{hhhj{hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj{h]h atomic_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubjM)}(h**Description**h]j)}(hj,|h]h Description}(hj.|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjB|hhhNhNubj)}(h**v**h]hv}(hjJ|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB|ubh to (}(hjB|hhhNhNubj)}(h**v**h]hv}(hj\|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB|ubh - 1) with release ordering.}(hjB|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(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.}(hju|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj|hhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_dec_return_relaxed (C function)c.raw_atomic_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhj|hMubh)}(hraw_atomic_dec_return_relaxedh]j)}(hraw_atomic_dec_return_relaxedh]hraw_atomic_dec_return_relaxed}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhj|hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsj}sbc.raw_atomic_dec_return_relaxedasbuh1hhj}ubjQ)}(h h]h }(hj=}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjK}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]hv}(hjX}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubah}(h]h ]h"]h$]h&]jjuh1j3hj|hhhj|hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|hhhj|hMubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hMhj|hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~}hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhj|hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj}h]h atomic_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj~hhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to (}(hj~hhhNhNubj)}(h**v**h]hv}(hj-~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh - 1) with relaxed ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(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.}(hjF~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(h **Return**h]j)}(hjW~h]hReturn}(hjY~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU~ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjm~hhhNhNubj)}(h**v**h]hv}(hju~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm~ubh.}(hjm~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_dec (C function)c.raw_atomic_fetch_dechNtauh1hhjhhhNhNubh)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hM$ubh)}(hraw_atomic_fetch_dech]j)}(hraw_atomic_fetch_dech]hraw_atomic_fetch_dec}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hM$ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsj~sbc.raw_atomic_fetch_decasbuh1hhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hj~hhhj~hM$ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hM$ubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hM$hj~hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjOhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjnubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjnubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjnubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjnubjM)}(h **Return**h]j)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjnubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_dec_acquire (C function)c.raw_atomic_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_dec_acquire (atomic_t *v)h]h)}(h-int raw_atomic_fetch_dec_acquire(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhM>ubh)}(hraw_atomic_fetch_dec_acquireh]j)}(hraw_atomic_fetch_dec_acquireh]hraw_atomic_fetch_dec_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhjhM>ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_dec_acquireasbuh1hhjubjQ)}(h h]h }(hj߀hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj{hhhjhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjhM>ubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM>hjthhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj hhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj?ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjdh]h atomic_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM?hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM?hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj?ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjρhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hj?ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj?ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhj?ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_dec_release (C function)c.raw_atomic_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhj^hMXubh)}(hraw_atomic_fetch_dec_releaseh]j)}(hraw_atomic_fetch_dec_releaseh]hraw_atomic_fetch_dec_release}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhj^hMXubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjssbc.raw_atomic_fetch_dec_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj˂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjLhhhj^hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhj^hMXubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^hMXhjEhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhj^hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj5h]h atomic_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhj/ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMYhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMYhj,ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubjM)}(h **Return**h]j)}(hjʃh]hReturn}(hj̃hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȃubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_dec_relaxed (C function)c.raw_atomic_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hMqubh)}(hraw_atomic_fetch_dec_relaxedh]j)}(hraw_atomic_fetch_dec_relaxedh]hraw_atomic_fetch_dec_relaxed}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hMqubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjDsbc.raw_atomic_fetch_dec_relaxedasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj/hMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj/hMqubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hMqhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjńhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj„hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hMqubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj݄jHj݄jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to (}(hjWhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh - 1) with relaxed ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMshjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_and (C function)c.raw_atomic_andhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_andh]j)}(hraw_atomic_andh]hraw_atomic_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]hi}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_andasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjʆhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdžhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(h int valueh]h int value}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hjDh]h atomic_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Safe to use in noinstr code; prefer atomic_and() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_and() elsewhere.}(hjڇhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_and (C function)c.raw_atomic_fetch_andhNtauh1hhjhhhNhNubh)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj>hMubh)}(hraw_atomic_fetch_andh]j)}(hraw_atomic_fetch_andh]hraw_atomic_fetch_and}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj>hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjeubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjSsbc.raw_atomic_fetch_andasbuh1hhjubjQ)}(h h]h }(hjĈhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj҈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj߈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjeubeh}(h]h ]h"]h$]h&]jjuh1j3hj,hhhj>hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj(hhhj>hMubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>hMhj%hhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj>hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjIh]hint i}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjCubj)}(hhh]jM)}(h int valueh]h int value}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjӉhhhNhNubj)}(h**v**h]hv}(hjۉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӉubh to (}(hjӉhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӉubh & }(hjӉhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӉubh) with full ordering.}(hjӉhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(h **Return**h]j)}(hj)h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(hThe original value of **v**.h](hThe original value of }(hj?hhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_acquire (C function)c.raw_atomic_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhjhMubh)}(hraw_atomic_fetch_and_acquireh]j)}(hraw_atomic_fetch_and_acquireh]hraw_atomic_fetch_and_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjˊhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjيhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_and_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj|hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhjhMubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjuhhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjҋh]h atomic_t *v}(hjԋhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjЋ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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̋ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hj#hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh to (}(hj#hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh & }(hj#hhhNhNubj)}(h**i**h]hi}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh) with acquire ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(h **Return**h]j)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_release (C function)c.raw_atomic_fetch_and_releasehNtauh1hhjhhhNhNubh)}(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}(hjЌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhǰhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjߌhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhǰhhhjތhMubh)}(hraw_atomic_fetch_and_releaseh]j)}(hraw_atomic_fetch_and_releaseh]hraw_atomic_fetch_and_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhǰhhhjތhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_and_releaseasbuh1hhj=ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hǰhhhjތhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjȌhhhjތhMubah}(h]jÌah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjތhMhjŌhhubj4)}(hhh]jM)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjŌhhhjތhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjʍh]h Parameters}(hj̍hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȍubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj"h]h atomic_t *v}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjčubjM)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjčubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjshhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh to (}(hjshhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh & }(hjshhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh) with release ordering.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjčubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjčubjM)}(h **Return**h]j)}(hjɎh]hReturn}(hjˎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǎubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjčubjM)}(hThe original value of **v**.h](hThe original value of }(hjߎhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߎubh.}(hjߎhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjčubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_relaxed (C function)c.raw_atomic_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hMubh)}(hraw_atomic_fetch_and_relaxedh]j)}(hraw_atomic_fetch_and_relaxedh]hraw_atomic_fetch_and_relaxed}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]hi}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjCsbc.raw_atomic_fetch_and_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjϏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj.hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj.hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj9h]hint i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3ubj)}(hhh]jM)}(h int valueh]h int value}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjrh]h atomic_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjÐhhhNhNubj)}(h**v**h]hv}(hjːhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÐubh to (}(hjÐhhhNhNubj)}(h**v**h]hv}(hjݐhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÐubh & }(hjÐhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÐubh) with relaxed ordering.}(hjÐhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_andnot (C function)c.raw_atomic_andnothNtauh1hhjhhhNhNubh)}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlhhhj~hMubh)}(hraw_atomic_andnoth]j)}(hraw_atomic_andnoth]hraw_atomic_andnot}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhj~hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjɑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_andnotasbuh1hhjݑubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjݑubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݑubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݑubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjlhhhj~hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhj~hMubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMhjehhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hjehhhj~hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj’h]h atomic_t *v}(hjĒhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjےhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjגhMhjؒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjגhMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.h]h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(h **Return**h]j)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_fetch_andnot (C function)c.raw_atomic_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h0int raw_atomic_fetch_andnot (int i, atomic_t *v)h]h)}(h/int raw_atomic_fetch_andnot(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_andnoth]j)}(hraw_atomic_fetch_andnoth]hraw_atomic_fetch_andnot}(hjϓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˓ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjѓsbc.raw_atomic_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjǔh]hint i}(hjɔhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjŔ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]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjܔ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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjQhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh to (}(hjQhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh & }(hjQhhhNhNubj)}(h**~i**h]h~i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh) with full ordering.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjŕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_fetch_andnot_acquire (C function)!c.raw_atomic_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM/ubh)}(hraw_atomic_fetch_andnot_acquireh]j)}(hraw_atomic_fetch_andnot_acquireh]hraw_atomic_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM/ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsj!sb!c.raw_atomic_fetch_andnot_acquireasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hM/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hM/ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM/hjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj֖hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjӖhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM/ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0hjubj)}(hhh]jM)}(h int valueh]h int value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,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]jS)}(hjPh]h atomic_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjJubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM1hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hj͗hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_fetch_andnot_release (C function)!c.raw_atomic_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj\hMJubh)}(hraw_atomic_fetch_andnot_releaseh]j)}(hraw_atomic_fetch_andnot_releaseh]hraw_atomic_fetch_andnot_release}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj\hMJubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj˜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjĘmodnameN classnameNjwjz)}j}]j)}jsjqsb!c.raw_atomic_fetch_andnot_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjJhhhj\hMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj\hMJubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\hMJhjChhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhj#hhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj\hMJubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjBubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjgh]hint i}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhjaubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMKhj^ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hjۙh]h Description}(hjݙhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٙubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjBubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjBubjM)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjBubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjBubjM)}(hThe original value of **v**.h](hThe original value of }(hj]hhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_fetch_andnot_relaxed (C function)!c.raw_atomic_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_relaxed (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMdubh)}(hraw_atomic_fetch_andnot_relaxedh]j)}(hraw_atomic_fetch_andnot_relaxedh]hraw_atomic_fetch_andnot_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMdubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjۚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjךubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjךubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjךubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjӚubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_fetch_andnot_relaxedasbuh1hhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjӚubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMdubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMdhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjshhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(h int valueh]h int value}(hjЛhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj̛hMehj͛ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̛hMehjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjAhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh to (}(hjAhhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh & }(hjAhhhNhNubj)}(h**~i**h]h~i}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh) with relaxed ordering.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjubjM)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_or (C function)c.raw_atomic_orhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM{ubh)}(h raw_atomic_orh]j)}(h raw_atomic_orh]h raw_atomic_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM{ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]hi}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_orasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM{ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM{ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM{hjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjƝhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjÝhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM{ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjޝjHjޝjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(h int valueh]h int value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM|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]jS)}(hj@h]h atomic_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhM}hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjubjM)}(h:Safe to use in noinstr code; prefer atomic_or() elsewhere.h]h:Safe to use in noinstr code; prefer atomic_or() elsewhere.}(hj֞hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_fetch_or (C function)c.raw_atomic_fetch_orhNtauh1hhjhhhNhNubh)}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj:hMubh)}(hraw_atomic_fetch_orh]j)}(hraw_atomic_fetch_orh]hraw_atomic_fetch_or}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj:hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjOsbc.raw_atomic_fetch_orasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjΟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj۟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubeh}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj:hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhj:hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:hMhj!hhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj:hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjEh]hint i}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(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]jM)}(h int valueh]h int value}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj~h]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjϠhhhNhNubj)}(h**v**h]hv}(hjנhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϠubh to (}(hjϠhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϠubh | }(hjϠhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϠubh) with full ordering.}(hjϠhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h **Return**h]j)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj;hhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_acquire (C function)c.raw_atomic_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(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}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxhhhjhMubh)}(hraw_atomic_fetch_or_acquireh]j)}(hraw_atomic_fetch_or_acquireh]hraw_atomic_fetch_or_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjxhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjǡhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjաhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_or_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjxhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjhMubah}(h]joah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjqhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj΢h]h atomic_t *v}(hjТhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj̢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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȢubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubjM)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubjM)}(h **Return**h]j)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_release (C function)c.raw_atomic_fetch_or_releasehNtauh1hhjhhhNhNubh)}(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}(hj̣hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȣhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjۣhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjȣhhhjڣhMubh)}(hraw_atomic_fetch_or_releaseh]j)}(hraw_atomic_fetch_or_releaseh]hraw_atomic_fetch_or_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjȣhhhjڣhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_or_releaseasbuh1hhj9ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hv}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjȣhhhjڣhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjģhhhjڣhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjڣhMhjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjڣhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjƤh]h Parameters}(hjȤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĤubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjܤubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjohhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh to (}(hjohhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh | }(hjohhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh) with release ordering.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjťh]hReturn}(hjǥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjåubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjۥhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۥubh.}(hjۥhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_relaxed (C function)c.raw_atomic_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_relaxed (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj*hMubh)}(hraw_atomic_fetch_or_relaxedh]j)}(hraw_atomic_fetch_or_relaxedh]hraw_atomic_fetch_or_relaxed}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj*hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]hi}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj?sbc.raw_atomic_fetch_or_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj˦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj*hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj*hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj*hMhjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj*hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj5h]hint i}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(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]jM)}(h int valueh]h int value}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjnh]h atomic_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjǧhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj٧hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj+hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_xor (C function)c.raw_atomic_xorhNtauh1hhjhhhNhNubh)}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjzhMubh)}(hraw_atomic_xorh]j)}(hraw_atomic_xorh]hraw_atomic_xor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjzhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjŨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݨubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_xorasbuh1hhj٨ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj٨ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٨ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٨ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjzhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjzhMubah}(h]j_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjahhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjשhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjөhMhjԩubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjөhMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(h **Return**h]j)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(hNothing.h]hNothing.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_xor (C function)c.raw_atomic_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_xor (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_xor(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_xorh]j)}(hraw_atomic_fetch_xorh]hraw_atomic_fetch_xor}(hj˪hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǪubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjߪubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjͪsbc.raw_atomic_fetch_xorasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjߪubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjëh]hint i}(hjūhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjܫhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjث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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjMhhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh to (}(hjMhhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh ^ }(hjMhhhNhNubj)}(h**i**h]hi}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh) with full ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_acquire (C function)c.raw_atomic_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_xor_acquireh]j)}(hraw_atomic_fetch_xor_acquireh]hraw_atomic_fetch_xor_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]hi}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_xor_acquireasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjҭhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϭhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(h int valueh]h int value}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hM hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM hj ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjLh]h atomic_t *v}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjFubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM!hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM!hj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjɮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_release (C function)c.raw_atomic_fetch_xor_releasehNtauh1hhjhhhNhNubh)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjXhM:ubh)}(hraw_atomic_fetch_xor_releaseh]j)}(hraw_atomic_fetch_xor_releaseh]hraw_atomic_fetch_xor_release}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjXhM:ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjmsbc.raw_atomic_fetch_xor_releaseasbuh1hhjubjQ)}(h h]h }(hjޯhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjXhM:ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjXhM:ubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhM:hj?hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhjXhM:ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjch]hint i}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(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]jM)}(h int valueh]h int value}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM;hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM;hjZubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubjM)}(h**Description**h]j)}(hjװh]h Description}(hjٰhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjհubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj>ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hj>ubjM)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj>ubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj>ubjM)}(hThe original value of **v**.h](hThe original value of }(hjYhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_relaxed (C function)c.raw_atomic_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMTubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMTubh)}(hraw_atomic_fetch_xor_relaxedh]j)}(hraw_atomic_fetch_xor_relaxedh]hraw_atomic_fetch_xor_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMTubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjױhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӱubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjӱubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӱubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjϱubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_xor_relaxedasbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjϱubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMTubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMTubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMThjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjohhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMTubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjubj)}(hhh]jM)}(h int valueh]h int value}(hj̲hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjȲhMUhjɲubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȲhMUhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh ^ }(hj=hhhNhNubj)}(h**i**h]hi}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_xchg (C function)c.raw_atomic_xchghNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMkubh)}(hraw_atomic_xchgh]j)}(hraw_atomic_xchgh]hraw_atomic_xchg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMkubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}jsj sbc.raw_atomic_xchgasbuh1hhj#ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMkubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMkubah}(h]jݳah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMkhj߳hhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjôhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjhhubah}(h]h ]h"]h$]h&]uh1j3hj߳hhhjhMkubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj۴jHj۴jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjߴubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMlhjubah}(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]jS)}(hj=h]hint new}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj7ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMmhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMmhjubeh}(h]h ]h"]h$]h&]uh1jhjߴubjM)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjߴubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjߴubjM)}(hhhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjԹhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjйhMhjѹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjйhMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to }(hj hhhNhNubj)}(h**new**h]hnew}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubjM)}(hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubjM)}(h **Return**h]j)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubjM)}(hThe original value of **v**.h](hThe original value of }(hjfhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_xchg_relaxed (C function)c.raw_atomic_xchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_xchg_relaxedh]j)}(hraw_atomic_xchg_relaxedh]hraw_atomic_xchg_relaxed}(hjȺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĺubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjʺsbc.raw_atomic_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjܺubj:)}(hint newh](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hnewh]hnew}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjܺubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjûhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjڻhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjֻ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]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjKhhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh to }(hjKhhhNhNubj)}(h**new**h]hnew}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh with relaxed ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_cmpxchg (C function)c.raw_atomic_cmpxchghNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_cmpxchgh]j)}(hraw_atomic_cmpxchgh]hraw_atomic_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj sbc.raw_atomic_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjʽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj޼hhhjhMubah}(h]jټah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjۼhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjۼhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj5h]h atomic_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjnh]hint old}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah }(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.h]h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_cmpxchg_acquire (C function)c.raw_atomic_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_acquire (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_acquire(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjɿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjſhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjؿhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjſhhhj׿hMubh)}(hraw_atomic_cmpxchg_acquireh]j)}(hraw_atomic_cmpxchg_acquireh]hraw_atomic_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjſhhhj׿hMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(holdh]hold}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjſhhhj׿hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj׿hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj׿hMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj׿hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjQh]hint old}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjKubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjkhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_cmpxchg_release (C function)c.raw_atomic_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_release (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_release(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_cmpxchg_releaseh]j)}(hraw_atomic_cmpxchg_releaseh]hraw_atomic_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(holdh]hold}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hj4h]hint old}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(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]jM)}(hint value to compare withh]hint value to compare with}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjmh]hint new}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjNhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_cmpxchg_relaxed (C function)c.raw_atomic_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_relaxed (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM(ubh)}(hraw_atomic_cmpxchg_relaxedh]j)}(hraw_atomic_cmpxchg_relaxedh]hraw_atomic_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM(ubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hnewh]hnew}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM(ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM)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]jS)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hint value to compare withh]hint value to compare with}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM*hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM*hjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjPh]hint new}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(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]jM)}(hint value to assignh]hint value to assign}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM+hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj1hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic_try_cmpxchg (C function)c.raw_atomic_try_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubjM)}(h **Return**h]j)}(hjOh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh if the exchange occurred, }(hjehhhNhNubj)}(h **false**h]hfalse}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh otherwise.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_try_cmpxchg_release (C function) c.raw_atomic_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_try_cmpxchg_releaseh]j)}(hraw_atomic_try_cmpxchg_releaseh]hraw_atomic_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.raw_atomic_try_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(holdh]hold}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjHh]hint *old}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_try_cmpxchg_relaxed (C function) c.raw_atomic_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_try_cmpxchg_relaxedh]j)}(hraw_atomic_try_cmpxchg_relaxedh]hraw_atomic_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.raw_atomic_try_cmpxchg_relaxedasbuh1hhj ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint *oldh](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj0h]h atomic_t *v}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjih]hint *old}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_sub_and_test (C function)c.raw_atomic_sub_and_testhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_sub_and_testh]j)}(hraw_atomic_sub_and_testh]hraw_atomic_sub_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]hi}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_sub_and_testasbuh1hhjbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hint value to subtracth]hint value to subtract}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#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]jS)}(hjGh]h atomic_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_dec_and_test (C function)c.raw_atomic_dec_and_testhNtauh1hhjhhhNhNubh)}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjrhMubh)}(hraw_atomic_dec_and_testh]j)}(hraw_atomic_dec_and_testh]hraw_atomic_dec_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjrhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjahhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjrhMubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjZhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjIh]h atomic_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjCubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_inc_and_test (C function)c.raw_atomic_inc_and_testhNtauh1hhjhhhNhNubh)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjbhMubh)}(hraw_atomic_inc_and_testh]j)}(hraw_atomic_inc_and_testh]hraw_atomic_inc_and_test}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjbhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjwsbc.raw_atomic_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjQhhhjbhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjbhMubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbhMhjJhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjbhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj9h]h atomic_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_add_negative (C function)c.raw_atomic_add_negativehNtauh1hhjhhhNhNubh)}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjRhM ubh)}(hraw_atomic_add_negativeh]j)}(hraw_atomic_add_negativeh]hraw_atomic_add_negative}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjRhM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjgsbc.raw_atomic_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjRhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhjRhM ubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhM hj:hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj:hhhjRhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj]h]hint i}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubah}(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]jM)}(hint value to addh]hint value to add}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhM hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjTubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubjM)}(hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh if the resulting value of }(hjShhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh is negative, }(hjShhhNhNubj)}(h **false**h]hfalse}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh otherwise.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_acquire (C function)!c.raw_atomic_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_add_negative_acquireh]j)}(hraw_atomic_add_negative_acquireh]hraw_atomic_add_negative_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_add_negative_acquireasbuh1hhj ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh + }(hjVhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with acquire ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_release (C function)!c.raw_atomic_add_negative_releasehNtauh1hhjhhhNhNubh)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hM7 ubh)}(hraw_atomic_add_negative_releaseh]j)}(hraw_atomic_add_negative_releaseh]hraw_atomic_add_negative_release}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hM7 ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]hi}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjEsb!c.raw_atomic_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj0hM7 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj0hM7 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hM7 hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hM7 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj;h]hint i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj5ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM8 hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM8 hj2ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjth]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjnubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjubjM)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM> hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh if the resulting value of }(hj1hhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh is negative, }(hj1hhhNhNubj)}(h **false**h]hfalse}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh otherwise.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNube(h)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_relaxed (C function)!c.raw_atomic_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMQ ubh)}(hraw_atomic_add_negative_relaxedh]j)}(hraw_atomic_add_negative_relaxedh]hraw_atomic_add_negative_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMQ ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_add_negative_relaxedasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMQ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMQ ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMQ hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjfhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMQ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMR hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMR hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMS hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMS hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh + }(hj4hhhNhNubj)}(h**i**h]hi}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with relaxed ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hjubjM)}(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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_add_unless (C function)c.raw_atomic_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMh ubh)}(hraw_atomic_fetch_add_unlessh]j)}(hraw_atomic_fetch_add_unlessh]hraw_atomic_fetch_add_unless}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMh ubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsj$sbc.raw_atomic_fetch_add_unlessasbuh1hhj:ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjםh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjlh]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMh ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMh hjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMh ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj%jHj%jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hj)ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjNh]h atomic_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hjHubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchMi hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMi hjEubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMj hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMj hjEubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMk hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMk hjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hj)ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hj)ubjM)}(hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hj)ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hj)ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_add_unless (C function)c.raw_atomic_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_add_unlessh]j)}(hraw_atomic_add_unlessh]hraw_atomic_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_add_unlessasbuh1hhj,ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjםh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjlh]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj@h]h atomic_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hj7ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjyh]hint a}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(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]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hj7ubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj7ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_inc_not_zero (C function)c.raw_atomic_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_inc_not_zeroh]j)}(hraw_atomic_inc_not_zeroh]hraw_atomic_inc_not_zero}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsj(sbc.raw_atomic_inc_not_zeroasbuh1hhj>ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj;hhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh != 0), atomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh% + 1) with full ordering. Otherwise, }(hj;hhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh2 is not modified and relaxed ordering is provided.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_inc_unless_negative (C function) c.raw_atomic_inc_unless_negativehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hM ubh)}(hraw_atomic_inc_unless_negativeh]j)}(hraw_atomic_inc_unless_negativeh]hraw_atomic_inc_unless_negative}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j)}jsj<sb c.raw_atomic_inc_unless_negativeasbuh1hhjRubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj'hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj'hM ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hM hjhhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjOhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh >= 0), atomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh% + 1) with full ordering. Otherwise, }(hjOhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh2 is not modified and relaxed ordering is provided.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_dec_unless_positive (C function) c.raw_atomic_dec_unless_positivehNtauh1hhjhhhNhNubh)}(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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj;hM ubh)}(hraw_atomic_dec_unless_positiveh]j)}(hraw_atomic_dec_unless_positiveh]hraw_atomic_dec_unless_positive}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj;hM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j)}jsjPsb c.raw_atomic_dec_unless_positiveasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubah}(h]h ]h"]h$]h&]jjuh1j3hj*hhhj;hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&hhhj;hM ubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;hM hj#hhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj;hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjchhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh <= 0), atomically updates }(hjchhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh to (}(hjchhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh% - 1) with full ordering. Otherwise, }(hjchhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh2 is not modified and relaxed ordering is provided.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_dec_if_positive (C function)c.raw_atomic_dec_if_positivehNtauh1hhjhhhNhNubh)}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhjPhM ubh)}(hraw_atomic_dec_if_positiveh]j)}(hraw_atomic_dec_if_positiveh]hraw_atomic_dec_if_positive}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhjPhM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjesbc.raw_atomic_dec_if_positiveasbuh1hhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hj>hhhjPhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj:hhhjPhM ubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhM hj7hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhjPhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj'h]h atomic_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%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]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh > 0), atomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh% - 1) with full ordering. Otherwise, }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh2 is not modified and relaxed ordering is provided.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_read (C function)c.raw_atomic64_readhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_readsbc.raw_atomic64_readasbuh1hhjEhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjmhM ubh)}(hraw_atomic64_readh]j)}(hjjh]hraw_atomic64_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjmhM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jhc.raw_atomic64_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjmhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjmhM ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmhM hj>hhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjmhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hj\h]hconst atomic64_t *v}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjVubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhM hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_read_acquire (C function)c.raw_atomic64_read_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_read_acquiresbc.raw_atomic64_read_acquireasbuh1hhj2hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhjZhM ubh)}(hraw_atomic64_read_acquireh]j)}(hjWh]hraw_atomic64_read_acquire}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhjZhM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jUc.raw_atomic64_read_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj2hhhjZhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhjZhM ubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhM hj+hhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhjZhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjIh]hconst atomic64_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjCubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hM hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubjM)}(hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hj$ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_set (C function)c.raw_atomic64_sethNtauh1hhjhhhNhNubh)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj1hM8 ubh)}(hraw_atomic64_seth]j)}(hraw_atomic64_seth]hraw_atomic64_set}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj1hM8 ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsjFsbc.raw_atomic64_setasbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_setasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj1hM8 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hM8 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hM8 hjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hM8 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjOh]h atomic64_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjIubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhM9 hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM9 hjFubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hj*ubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hj*ubjM)}(h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM= hj*ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hj*ubjM)}(hNothing.h]hNothing.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@ hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%raw_atomic64_set_release (C function)c.raw_atomic64_set_releasehNtauh1hhjhhhNhNubh)}(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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhjphMI ubh)}(hraw_atomic64_set_releaseh]j)}(hraw_atomic64_set_releaseh]hraw_atomic64_set_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^hhhjphMI ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj^hhhjphMI ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZhhhjphMI ubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphMI hjWhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjJhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjphMI ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjiubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMJ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJ hjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMK hjubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjiubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhML hjiubjM)}(hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMN hjiubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hjiubjM)}(hNothing.h]hNothing.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_add (C function)c.raw_atomic64_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void raw_atomic64_add (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_add(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMc ubh)}(hraw_atomic64_addh]j)}(hraw_atomic64_addh]hraw_atomic64_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMc ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]jc.raw_atomic64_addasbuh1hhj#ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMc ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMc ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMc hjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMc ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMd 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMe hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to (}(hjWhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh + }(hjWhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh) with relaxed ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMf hjubjM)}(h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_add_return (C function)c.raw_atomic64_add_returnhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_returnsbc.raw_atomic64_add_returnasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMt ubh)}(hraw_atomic64_add_returnh]j)}(hjh]hraw_atomic64_add_return}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMt ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_returnasbuh1hhj@ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]hi}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMt ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMt ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMt hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMt ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hj ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj1h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/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]jM)}(hs64 value to addh]hs64 value to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMu hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMu hj(ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjjh]h atomic64_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjdubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMv hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMv hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hj ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMw hj ubjM)}(hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj'hhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM| hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_add_return_acquire (C function)!c.raw_atomic64_add_return_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_acquiresb!c.raw_atomic64_add_return_acquireasbuh1hhjdhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjhM ubh)}(hraw_atomic64_add_return_acquireh]j)}(hjh]hraw_atomic64_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhjhM ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hj]hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjchhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~jHj~jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj1hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh to (}(hj1hhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh + }(hj1hhhNhNubj)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh) with acquire ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_add_return_release (C function)!c.raw_atomic64_add_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_releasesb!c.raw_atomic64_add_return_releaseasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_add_return_releaseh]j)}(hjh]hraw_atomic64_add_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_releaseasbuh1hhj,ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]hi}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_releaseasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to addh]hs64 value to add}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hM hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjVh]h atomic64_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhM hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_add_return_relaxed (C function)!c.raw_atomic64_add_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_relaxedsb!c.raw_atomic64_add_return_relaxedasbuh1hhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjxhM ubh)}(hraw_atomic64_add_return_relaxedh]j)}(hjuh]hraw_atomic64_add_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjxhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]js!c.raw_atomic64_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]js!c.raw_atomic64_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjxhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjxhM ubah}(h]jGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxhM hjIhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjxhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_add (C function)c.raw_atomic64_fetch_addhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_addsbc.raw_atomic64_fetch_addasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_fetch_addh]j)}(hjh]hraw_atomic64_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_addasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_addasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hs64 value to addh]hs64 value to add}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hjB h]h atomic64_t *v}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ 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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjW hM hjX ubah}(h]h ]h"]h$]h&]uh1jhj< ubeh}(h]h ]h"]h$]h&]uh1jhjW hM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj} h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_acquire (C function) c.raw_atomic64_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjE modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_acquiresb c.raw_atomic64_fetch_add_acquireasbuh1hhj< hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hje hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj< hhhjd hM ubh)}(hraw_atomic64_fetch_add_acquireh]j)}(hja h]hraw_atomic64_fetch_add_acquire}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj< hhhjd hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j_  c.raw_atomic64_fetch_add_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j_  c.raw_atomic64_fetch_add_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj< hhhjd hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8 hhhjd hM ubah}(h]j3 ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjd hM hj5 hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj; hhubah}(h]h ]h"]h$]h&]uh1j3hj5 hhhjd hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjV jHjV jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj` h]h Parameters}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj} ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjy ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]uh1jhj hM hjv ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hjv ubeh}(h]h ]h"]h$]h&]uh1jhjZ ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**i**h]hi}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with acquire ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubjM)}(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.}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubjM)}(h **Return**h]j)}(hj_ h]hReturn}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubjM)}(hThe original value of **v**.h](hThe original value of }(hju hhhNhNubj)}(h**v**h]hv}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubh.}(hju hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjZ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_release (C function) c.raw_atomic64_fetch_add_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsraw_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 ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hM ubh)}(hraw_atomic64_fetch_add_releaseh]j)}(hj h]hraw_atomic64_fetch_add_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j  c.raw_atomic64_fetch_add_releaseasbuh1hhj ubjQ)}(h h]h }(hj) hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj7 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjR hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjT modnameN classnameNjwjz)}j}]j  c.raw_atomic64_fetch_add_releaseasbuh1hhjK ubjQ)}(h h]h }(hjp hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK ubj)}(hjh]h*}(hj~ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hM ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM hj hhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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]jS)}(hj.h]h atomic64_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_relaxed (C function) c.raw_atomic64_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_relaxedsb c.raw_atomic64_fetch_add_relaxedasbuh1hhj(hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhjPhM+ ubh)}(hraw_atomic64_fetch_add_relaxedh]j)}(hjMh]hraw_atomic64_fetch_add_relaxed}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhjPhM+ ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jK c.raw_atomic64_fetch_add_relaxedasbuh1hhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jK c.raw_atomic64_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hj(hhhjPhM+ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhjPhM+ ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhM+ hj!hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj'hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhjPhM+ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjFubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjkh]hs64 i}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjeubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM, hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM, hjbubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM- hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM- hjbubeh}(h]h ]h"]h$]h&]uh1jhjFubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjFubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM. hjFubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_relaxed() elsewhere.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjFubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2 hjFubjM)}(hThe original value of **v**.h](hThe original value of }(hjahhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3 hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_sub (C function)c.raw_atomic64_subhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMB ubh)}(hraw_atomic64_subh]j)}(hraw_atomic64_subh]hraw_atomic64_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMB ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]jc.raw_atomic64_subasbuh1hhj$ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMB ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMB hjhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMB ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMC hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMD hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMD hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh - }(hjXhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with relaxed ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hjubjM)}(h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_sub_return (C function)c.raw_atomic64_sub_returnhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_returnsbc.raw_atomic64_sub_returnasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMS ubh)}(hraw_atomic64_sub_returnh]j)}(hjh]hraw_atomic64_sub_return}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMS ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]jc.raw_atomic64_sub_returnasbuh1hhjAubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]hi}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_sub_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMS ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMS ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMS hjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMS ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj2h]hs64 i}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hj,ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMT hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMT hj)ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjkh]h atomic64_t *v}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjeubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMU hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMU hj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hj ubjM)}(hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZ hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj(hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_sub_return_acquire (C function)!c.raw_atomic64_sub_return_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_acquiresb!c.raw_atomic64_sub_return_acquireasbuh1hhjehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjhMn ubh)}(hraw_atomic64_sub_return_acquireh]j)}(hjh]hraw_atomic64_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjhMn ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjehhhjhMn ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjhMn ubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMn hj^hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn hjdhhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhjhMn ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMo hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMo hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMp hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMp hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh - }(hj2hhhNhNubj)}(h**i**h]hi}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with acquire ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hjubjM)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_sub_return_release (C function)!c.raw_atomic64_sub_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_releasesb!c.raw_atomic64_sub_return_releaseasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_sub_return_releaseh]j)}(hjh]hraw_atomic64_sub_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j!c.raw_atomic64_sub_return_releaseasbuh1hhj-ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]hi}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j!c.raw_atomic64_sub_return_releaseasbuh1hhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjWh]h atomic64_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_sub_return_relaxed (C function)!c.raw_atomic64_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_relaxedsb!c.raw_atomic64_sub_return_relaxedasbuh1hhjQhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjyhM ubh)}(hraw_atomic64_sub_return_relaxedh]j)}(hjvh]hraw_atomic64_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjyhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jt!c.raw_atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jt!c.raw_atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjQhhhjyhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjyhM ubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhM hjJhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPhhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjyhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM 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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjoubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubjM)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_sub (C function)c.raw_atomic64_fetch_subhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_subsbc.raw_atomic64_fetch_subasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_fetch_subh]j)}(hjh]hraw_atomic64_fetch_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_subasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjimodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_subasbuh1hhj`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hj ubah}(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]jS)}(hjCh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhM hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_sub_acquire (C function) c.raw_atomic64_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjF modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_sub_acquiresb c.raw_atomic64_fetch_sub_acquireasbuh1hhj= hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjf hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj= hhhje hM ubh)}(hraw_atomic64_fetch_sub_acquireh]j)}(hjb h]hraw_atomic64_fetch_sub_acquire}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj= hhhje hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j`  c.raw_atomic64_fetch_sub_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j`  c.raw_atomic64_fetch_sub_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj= hhhje hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9 hhhje hM ubah}(h]j4 ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhje hM hj6 hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj?!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjAtomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj(hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh to (}(hj(hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh + 1) with relaxed ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hjc(ubjM)}(h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.}(hj )hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM% hjc(ubjM)}(h **Return**h]j)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM' hjc(ubjM)}(hNothing.h]hNothing.}(hj3)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM( hjc(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_inc_return (C function)c.raw_atomic64_inc_returnhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hje)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjg)modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_returnsbc.raw_atomic64_inc_returnasbuh1hhj^)hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^)hhhj)hM5 ubh)}(hraw_atomic64_inc_returnh]j)}(hj)h]hraw_atomic64_inc_return}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^)hhhj)hM5 ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)c.raw_atomic64_inc_returnasbuh1hhj)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubah}(h]h ]h"]h$]h&]jjuh1j3hj^)hhhj)hM5 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZ)hhhj)hM5 ubah}(h]jU)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hM5 hjW)hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 hj*hhubah}(h]h ]h"]h$]h&]uh1j3hjW)hhhj)hM5 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1*jHj1*jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;*h]h Parameters}(hj=*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9*ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hj5*ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjZ*h]h atomic64_t *v}(hj\*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX*ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6 hjT*ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjs*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjo*hM6 hjp*ubah}(h]h ]h"]h$]h&]uh1jhjT*ubeh}(h]h ]h"]h$]h&]uh1jhjo*hM6 hjQ*ubah}(h]h ]h"]h$]h&]uh1jhj5*ubjM)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj5*ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh to (}(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh + 1) with full ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hj5*ubjM)}(hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hj5*ubjM)}(h **Return**h]j)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hj5*ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj+hhhNhNubj)}(h**v**h]hv}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hj5*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_inc_return_acquire (C function)!c.raw_atomic64_inc_return_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjI+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjK+modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_acquiresb!c.raw_atomic64_inc_return_acquireasbuh1hhjB+hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO ubjQ)}(h h]h }(hjk+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB+hhhjj+hMO ubh)}(hraw_atomic64_inc_return_acquireh]j)}(hjg+h]hraw_atomic64_inc_return_acquire}(hj}+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjB+hhhjj+hMO ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]je+!c.raw_atomic64_inc_return_acquireasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubah}(h]h ]h"]h$]h&]jjuh1j3hjB+hhhjj+hMO ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>+hhhjj+hMO ubah}(h]j9+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjj+hMO hj;+hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO hj+hhubah}(h]h ]h"]h$]h&]uh1j3hj;+hhhjj+hMO ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj!,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj,ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj>,h]h atomic64_t *v}(hj@,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<,ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hj8,ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjW,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjS,hMP hjT,ubah}(h]h ]h"]h$]h&]uh1jhj8,ubeh}(h]h ]h"]h$]h&]uh1jhjS,hMP hj5,ubah}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hjy,h]h Description}(hj{,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hj,ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh + 1) with acquire ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hj,ubjM)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_acquire() elsewhere.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj,ubjM)}(h **Return**h]j)}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj,ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_inc_return_release (C function)!c.raw_atomic64_inc_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_release (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj--hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/-modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_releasesb!c.raw_atomic64_inc_return_releaseasbuh1hhj&-hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi ubjQ)}(h h]h }(hjO-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&-hhhjN-hMi ubh)}(hraw_atomic64_inc_return_releaseh]j)}(hjK-h]hraw_atomic64_inc_return_release}(hja-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&-hhhjN-hMi ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]jI-!c.raw_atomic64_inc_return_releaseasbuh1hhjx-ubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx-ubj)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjt-ubah}(h]h ]h"]h$]h&]jjuh1j3hj&-hhhjN-hMi ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"-hhhjN-hMi ubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjN-hMi hj-hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hj-hhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhjN-hMi ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hj-ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj".h]h atomic64_t *v}(hj$.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj .ubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7.hMj hj8.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj7.hMj hj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hj].h]h Description}(hj_.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[.ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hj-ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjs.hhhNhNubj)}(h**v**h]hv}(hj{.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs.ubh to (}(hjs.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs.ubh + 1) with release ordering.}(hjs.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hj-ubjM)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hj-ubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hj-ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_inc_return_relaxed (C function)!c.raw_atomic64_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_relaxedsb!c.raw_atomic64_inc_return_relaxedasbuh1hhj /hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj3/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj /hhhj2/hM ubh)}(hraw_atomic64_inc_return_relaxedh]j)}(hj//h]hraw_atomic64_inc_return_relaxed}(hjE/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj /hhhj2/hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjc/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetje/modnameN classnameNjwjz)}j}]j-/!c.raw_atomic64_inc_return_relaxedasbuh1hhj\/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\/ubj)}(hjh]hv}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjX/ubah}(h]h ]h"]h$]h&]jjuh1j3hj /hhhj2/hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhj2/hM ubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2/hM hj/hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/hhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhj2/hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj0h]h atomic64_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hM hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubjM)}(h**Description**h]j)}(hjA0h]h Description}(hjC0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?0ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjW0hhhNhNubj)}(h**v**h]hv}(hj_0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW0ubh to (}(hjW0hhhNhNubj)}(h**v**h]hv}(hjq0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW0ubh + 1) with relaxed ordering.}(hjW0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ubjM)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_inc (C function)c.raw_atomic64_fetch_inchNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_incsbc.raw_atomic64_fetch_incasbuh1hhj0hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj1hM ubh)}(hraw_atomic64_fetch_inch]j)}(hj1h]hraw_atomic64_fetch_inc}(hj)1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj1hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjG1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjI1modnameN classnameNjwjz)}j}]j1c.raw_atomic64_fetch_incasbuh1hhj@1ubjQ)}(h h]h }(hje1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@1ubj)}(hjh]h*}(hjs1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@1ubj)}(hjh]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<1ubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj1hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj1hM ubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hM hj0hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj1hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj1h]h atomic64_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hj%2h]h Description}(hj'2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#2ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj;2hhhNhNubj)}(h**v**h]hv}(hjC2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;2ubh to (}(hj;2hhhNhNubj)}(h**v**h]hv}(hjU2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;2ubh + 1) with full ordering.}(hj;2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.}(hjn2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}2ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubjM)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_inc_acquire (C function) c.raw_atomic64_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_acquiresb c.raw_atomic64_fetch_inc_acquireasbuh1hhj2hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hM ubh)}(hraw_atomic64_fetch_inc_acquireh]j)}(hj2h]hraw_atomic64_fetch_inc_acquire}(hj 3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhj2hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-3modnameN classnameNjwjz)}j}]j2 c.raw_atomic64_fetch_inc_acquireasbuh1hhj$3ubjQ)}(h h]h }(hjI3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$3ubj)}(hjh]h*}(hjW3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$3ubj)}(hjh]hv}(hjd3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 3ubah}(h]h ]h"]h$]h&]jjuh1j3hj2hhhj2hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj2hM ubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hM hj2hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3hhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj3h]h atomic64_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hj 4h]h Description}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj'4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hj94hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh + 1) with acquire ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(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.}(hjR4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(h **Return**h]j)}(hjc4h]hReturn}(hje4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja4ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(hThe original value of **v**.h](hThe original value of }(hjy4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy4ubh.}(hjy4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_inc_release (C function) c.raw_atomic64_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_releasesb c.raw_atomic64_fetch_inc_releaseasbuh1hhj4hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhj4hM ubh)}(hraw_atomic64_fetch_inc_releaseh]j)}(hj4h]hraw_atomic64_fetch_inc_release}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhj4hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j4 c.raw_atomic64_fetch_inc_releaseasbuh1hhj5ubjQ)}(h h]h }(hj-5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj;5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hv}(hjH5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hj4hhhj4hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhj4hM ubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hM hj4hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjq5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjn5hhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhj4hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj5h]h atomic64_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to (}(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh + 1) with release ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubjM)}(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.}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubjM)}(h **Return**h]j)}(hjG6h]hReturn}(hjI6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubjM)}(hThe original value of **v**.h](hThe original value of }(hj]6hhhNhNubj)}(h**v**h]hv}(hje6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]6ubh.}(hj]6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_inc_relaxed (C function) c.raw_atomic64_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_relaxedsb c.raw_atomic64_fetch_inc_relaxedasbuh1hhj6hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhj6hM ubh)}(hraw_atomic64_fetch_inc_relaxedh]j)}(hj6h]hraw_atomic64_fetch_inc_relaxed}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhj6hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j6 c.raw_atomic64_fetch_inc_relaxedasbuh1hhj6ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hv}(hj,7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubah}(h]h ]h"]h$]h&]jjuh1j3hj6hhhj6hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj6hM ubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hM hj6hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjU7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjR7hhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhj6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjm7jHjm7jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjw7h]h Parameters}(hjy7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju7ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj7h]h atomic64_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhjq7ubjM)}(h**Description**h]j)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh to (}(hj7hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh + 1) with relaxed ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubjM)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubjM)}(h **Return**h]j)}(hj+8h]hReturn}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubjM)}(hThe original value of **v**.h](hThe original value of }(hjA8hhhNhNubj)}(h**v**h]hv}(hjI8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA8ubh.}(hjA8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjq7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_dec (C function)c.raw_atomic64_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void raw_atomic64_dec (atomic64_t *v)h]h)}(h$void raw_atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~8hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~8hhhj8hM ubh)}(hraw_atomic64_dech]j)}(hraw_atomic64_dech]hraw_atomic64_dec}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~8hhhj8hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsj8sbc.raw_atomic64_decasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubah}(h]h ]h"]h$]h&]jjuh1j3hj~8hhhj8hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjz8hhhj8hM ubah}(h]ju8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hM hjw8hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj&9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj#9hhubah}(h]h ]h"]h$]h&]uh1j3hjw8hhhj8hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>9jHj>9jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjH9h]h Parameters}(hjJ9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjg9h]h atomic64_t *v}(hji9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje9ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hja9ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|9hM hj}9ubah}(h]h ]h"]h$]h&]uh1jhja9ubeh}(h]h ]h"]h$]h&]uh1jhj|9hM hj^9ubah}(h]h ]h"]h$]h&]uh1jhjB9ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh to (}(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh - 1) with relaxed ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubjM)}(h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubjM)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubjM)}(hNothing.h]hNothing.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjB9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_dec_return (C function)c.raw_atomic64_dec_returnhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjD:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjF:modnameN classnameNjwjz)}j}]j)}jsraw_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 ubjQ)}(h h]h }(hjf:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=:hhhje:hM ubh)}(hraw_atomic64_dec_returnh]j)}(hjb:h]hraw_atomic64_dec_return}(hjx:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=:hhhje:hM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j`:c.raw_atomic64_dec_returnasbuh1hhj:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hj=:hhhje:hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9:hhhje:hM ubah}(h]j4:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhje:hM hj6:hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:hhubah}(h]h ]h"]h$]h&]uh1j3hj6:hhhje:hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj9;h]h atomic64_t *v}(hj;;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3;ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjR;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjN;hM hjO;ubah}(h]h ]h"]h$]h&]uh1jhj3;ubeh}(h]h ]h"]h$]h&]uh1jhjN;hM hj0;ubah}(h]h ]h"]h$]h&]uh1jhj;ubjM)}(h**Description**h]j)}(hjt;h]h Description}(hjv;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh - 1) with full ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubjM)}(hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_dec_return_acquire (C function)!c.raw_atomic64_dec_return_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj(<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*<modnameN classnameNjwjz)}j}]j)}jsraw_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) ubjQ)}(h h]h }(hjJ<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!<hhhjI<hM) ubh)}(hraw_atomic64_dec_return_acquireh]j)}(hjF<h]hraw_atomic64_dec_return_acquire}(hj\<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!<hhhjI<hM) ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjz<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|<modnameN classnameNjwjz)}j}]jD<!c.raw_atomic64_dec_return_acquireasbuh1hhjs<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjo<ubah}(h]h ]h"]h$]h&]jjuh1j3hj!<hhhjI<hM) ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhjI<hM) ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjI<hM) hj<hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjI<hM) ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj=h]h atomic64_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2=hM* hj3=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj2=hM* hj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hjX=h]h Description}(hjZ=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hj<ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjn=hhhNhNubj)}(h**v**h]hv}(hjv=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn=ubh to (}(hjn=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn=ubh - 1) with acquire ordering.}(hjn=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj<ubjM)}(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=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj<ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj<ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_dec_return_release (C function)!c.raw_atomic64_dec_return_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj >ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsraw_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.hhMC ubjQ)}(h h]h }(hj.>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj->hMC ubh)}(hraw_atomic64_dec_return_releaseh]j)}(hj*>h]hraw_atomic64_dec_return_release}(hj@>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj->hMC ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj^>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`>modnameN classnameNjwjz)}j}]j(>!c.raw_atomic64_dec_return_releaseasbuh1hhjW>ubjQ)}(h h]h }(hj|>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW>ubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjS>ubah}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj->hMC ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj->hMC ubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj->hMC hj=hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hj>hhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhj->hMC ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hj>ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj?h]h atomic64_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD hj>ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMD hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hMD hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubjM)}(h**Description**h]j)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj>ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjR?hhhNhNubj)}(h**v**h]hv}(hjZ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR?ubh to (}(hjR?hhhNhNubj)}(h**v**h]hv}(hjl?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR?ubh - 1) with release ordering.}(hjR?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hj>ubjM)}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hj>ubjM)}(h **Return**h]j)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hj>ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_dec_return_relaxed (C function)!c.raw_atomic64_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_relaxedsb!c.raw_atomic64_dec_return_relaxedasbuh1hhj?hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj@hM\ ubh)}(hraw_atomic64_dec_return_relaxedh]j)}(hj@h]hraw_atomic64_dec_return_relaxed}(hj$@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhj@hM\ ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjB@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD@modnameN classnameNjwjz)}j}]j @!c.raw_atomic64_dec_return_relaxedasbuh1hhj;@ubjQ)}(h h]h }(hj`@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;@ubj)}(hjh]h*}(hjn@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;@ubj)}(hjh]hv}(hj{@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7@ubah}(h]h ]h"]h$]h&]jjuh1j3hj?hhhj@hM\ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhj@hM\ ubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hM\ hj?hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ hj@hhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhj@hM\ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj@h]h atomic64_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@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@ubjM)}(h**Description**h]j)}(hj Ah]h Description}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_ hj@ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj6AhhhNhNubj)}(h**v**h]hv}(hj>AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Aubh to (}(hj6AhhhNhNubj)}(h**v**h]hv}(hjPAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Aubh - 1) with relaxed ordering.}(hj6AhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^ hj@ubjM)}(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.}(hjiAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM` hj@ubjM)}(h **Return**h]j)}(hjzAh]hReturn}(hj|AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMb hj@ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjAhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_dec (C function)c.raw_atomic64_fetch_dechNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_decsbc.raw_atomic64_fetch_decasbuh1hhjAhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjAhMr ubh)}(hraw_atomic64_fetch_dech]j)}(hjAh]hraw_atomic64_fetch_dec}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjAhMr ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj&BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(BmodnameN classnameNjwjz)}j}]jAc.raw_atomic64_fetch_decasbuh1hhjBubjQ)}(h h]h }(hjDBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjRBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]hv}(hj_BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubah}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjAhMr ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjAhMr ubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhMr hjAhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjBhhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjAhMr ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjBubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjBh]h atomic64_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hjBubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMs hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMs hjBubah}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hjBubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjChhhNhNubj)}(h**v**h]hv}(hj"ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh to (}(hjChhhNhNubj)}(h**v**h]hv}(hj4ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh - 1) with full ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjBubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.}(hjMChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjBubjM)}(h **Return**h]j)}(hj^Ch]hReturn}(hj`ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Cubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjBubjM)}(hThe original value of **v**.h](hThe original value of }(hjtChhhNhNubj)}(h**v**h]hv}(hj|ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtCubh.}(hjtChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_dec_acquire (C function) c.raw_atomic64_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_acquiresb c.raw_atomic64_fetch_dec_acquireasbuh1hhjChhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjChM ubh)}(hraw_atomic64_fetch_dec_acquireh]j)}(hjCh]hraw_atomic64_fetch_dec_acquire}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjChM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj DmodnameN classnameNjwjz)}j}]jC c.raw_atomic64_fetch_dec_acquireasbuh1hhjDubjQ)}(h h]h }(hj(DhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hj6DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hv}(hjCDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubah}(h]h ]h"]h$]h&]jjuh1j3hjChhhjChM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjChM ubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjChM hjChhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjlDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjiDhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjChM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjDh]h atomic64_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to (}(hjDhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh - 1) with acquire ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubjM)}(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.}(hj1EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubjM)}(h **Return**h]j)}(hjBEh]hReturn}(hjDEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Eubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubjM)}(hThe original value of **v**.h](hThe original value of }(hjXEhhhNhNubj)}(h**v**h]hv}(hj`EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXEubh.}(hjXEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_dec_release (C function) c.raw_atomic64_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_releasesb c.raw_atomic64_fetch_dec_releaseasbuh1hhjEhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjEhM ubh)}(hraw_atomic64_fetch_dec_releaseh]j)}(hjEh]hraw_atomic64_fetch_dec_release}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjEhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jE c.raw_atomic64_fetch_dec_releaseasbuh1hhjEubjQ)}(h h]h }(hj FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hv}(hj'FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubah}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjEhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjEhhhjEhM ubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhM hjEhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjPFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjMFhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhjEhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhFjHjhFjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjrFh]h Parameters}(hjtFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpFubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlFubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjFh]h atomic64_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjFubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjlFubjM)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlFubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh to (}(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh - 1) with release ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlFubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlFubjM)}(h **Return**h]j)}(hj&Gh]hReturn}(hj(GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Gubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlFubjM)}(hThe original value of **v**.h](hThe original value of }(hjAtomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjHhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh to (}(hjHhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh - 1) with relaxed ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPHubjM)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPHubjM)}(h **Return**h]j)}(hj Ih]hReturn}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPHubjM)}(hThe original value of **v**.h](hThe original value of }(hj IhhhNhNubj)}(h**v**h]hv}(hj(IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Iubh.}(hj IhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_and (C function)c.raw_atomic64_andhNtauh1hhjhhhNhNubh)}(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}(hjaIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Ihhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjpIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]IhhhjoIhM ubh)}(hraw_atomic64_andh]j)}(hraw_atomic64_andh]hraw_atomic64_and}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Iubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]IhhhjoIhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsjIsbc.raw_atomic64_andasbuh1hhjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]hi}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]jIc.raw_atomic64_andasbuh1hhjIubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hv}(hj#JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubeh}(h]h ]h"]h$]h&]jjuh1j3hj]IhhhjoIhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYIhhhjoIhM ubah}(h]jTIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjoIhM hjVIhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjLJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjIJhhubah}(h]h ]h"]h$]h&]uh1j3hjVIhhhjoIhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdJjHjdJjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjnJh]h Parameters}(hjpJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlJubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjJh]hs64 i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(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]jM)}(h s64 valueh]h s64 value}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM hjJubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjJh]h atomic64_t *v}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM hjJubeh}(h]h ]h"]h$]h&]uh1jhjhJubjM)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh to (}(hjKhhhNhNubj)}(h**v**h]hv}(hj1KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh & }(hjKhhhNhNubj)}(h**i**h]hi}(hjCKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh) with relaxed ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubjM)}(h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.}(hj\KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubjM)}(h **Return**h]j)}(hjmKh]hReturn}(hjoKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkKubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubjM)}(hNothing.h]hNothing.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_and (C function)c.raw_atomic64_fetch_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_and (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_and(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andsbc.raw_atomic64_fetch_andasbuh1hhjKhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhM ubh)}(hraw_atomic64_fetch_andh]j)}(hjKh]hraw_atomic64_fetch_and}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhjKhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj LmodnameN classnameNjwjz)}j}]jKc.raw_atomic64_fetch_andasbuh1hhjLubjQ)}(h h]h }(hj%LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]hi}(hj3LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjNLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPLmodnameN classnameNjwjz)}j}]jKc.raw_atomic64_fetch_andasbuh1hhjGLubjQ)}(h h]h }(hjlLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGLubj)}(hjh]h*}(hjzLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubeh}(h]h ]h"]h$]h&]jjuh1j3hjKhhhjKhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjKhM ubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhM hjKhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjKhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_and() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjLh]hs64 i}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(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]jM)}(h s64 valueh]h s64 value}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhM hjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjMhM hjLubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj*Mh]h atomic64_t *v}(hj,MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(Mubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$Mubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjCMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?MhM hj@Mubah}(h]h ]h"]h$]h&]uh1jhj$Mubeh}(h]h ]h"]h$]h&]uh1jhj?MhM hjLubeh}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjeMh]h Description}(hjgMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj{MhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Mubh to (}(hj{MhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Mubh & }(hj{MhhhNhNubj)}(h**i**h]hi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Mubh) with full ordering.}(hj{MhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(hThe original value of **v**.h](hThe original value of }(hjMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_and_acquire (C function) c.raw_atomic64_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj+NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Nubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-NmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_and_acquiresb c.raw_atomic64_fetch_and_acquireasbuh1hhj$Nhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjMNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$NhhhjLNhMubh)}(hraw_atomic64_fetch_and_acquireh]j)}(hjINh]hraw_atomic64_fetch_and_acquire}(hj_NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Nubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$NhhhjLNhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj}NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jGN c.raw_atomic64_fetch_and_acquireasbuh1hhjvNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvNubj)}(hjh]hi}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrNubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jGN c.raw_atomic64_fetch_and_acquireasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrNubeh}(h]h ]h"]h$]h&]jjuh1j3hj$NhhhjLNhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj NhhhjLNhMubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLNhMhjNhhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj&OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj#Ohhubah}(h]h ]h"]h$]h&]uh1j3hjNhhhjLNhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>OjHj>OjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjHOh]h Parameters}(hjJOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBOubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjgOh]hs64 i}(hjiOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaOubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|OhMhj}Oubah}(h]h ]h"]h$]h&]uh1jhjaOubeh}(h]h ]h"]h$]h&]uh1jhj|OhMhj^Oubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjOh]h atomic64_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj^Oubeh}(h]h ]h"]h$]h&]uh1jhjBOubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBOubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh & }(hjOhhhNhNubj)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh) with acquire ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBOubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere.}(hj6PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBOubjM)}(h **Return**h]j)}(hjGPh]hReturn}(hjIPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEPubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBOubjM)}(hThe original value of **v**.h](hThe original value of }(hj]PhhhNhNubj)}(h**v**h]hv}(hjePhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Pubh.}(hj]PhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjBOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_and_release (C function) c.raw_atomic64_fetch_and_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_and_releasesb c.raw_atomic64_fetch_and_releaseasbuh1hhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhMubh)}(hraw_atomic64_fetch_and_releaseh]j)}(hjPh]hraw_atomic64_fetch_and_release}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]jP c.raw_atomic64_fetch_and_releaseasbuh1hhjPubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]hi}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj:QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Qubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhj.Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic64_andnot (C function)c.raw_atomic64_andnothNtauh1hhjhhhNhNubh)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjUhMMubh)}(hraw_atomic64_andnoth]j)}(hraw_atomic64_andnoth]hraw_atomic64_andnot}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhjUhMMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjUsbc.raw_atomic64_andnotasbuh1hhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]hi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVmodnameN classnameNjwjz)}j}]jUc.raw_atomic64_andnotasbuh1hhj VubjQ)}(h h]h }(hj1VhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Vubj)}(hjh]h*}(hj?VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Vubj)}(hjh]hv}(hjLVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Vubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjUhhhjUhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjUhMMubah}(h]j}Uah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMMhjUhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjuVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjrVhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjUhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_andnot() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjVubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjVh]hs64 i}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjVubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMNhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMNhjVubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjVh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjVubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMOhjWubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjWhMOhjVubeh}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hj*Wh]h Description}(hj,WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Wubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjVubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj@WhhhNhNubj)}(h**v**h]hv}(hjHWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Wubh to (}(hj@WhhhNhNubj)}(h**v**h]hv}(hjZWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Wubh & }(hj@WhhhNhNubj)}(h**~i**h]h~i}(hjlWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Wubh) with relaxed ordering.}(hj@WhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjVubjM)}(h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.h]h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjVubjM)}(h **Return**h]j)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjVubjM)}(hNothing.h]hNothing.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_fetch_andnot (C function)c.raw_atomic64_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h4s64 raw_atomic64_fetch_andnot (s64 i, atomic64_t *v)h]h)}(h3s64 raw_atomic64_fetch_andnot(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andnotsbc.raw_atomic64_fetch_andnotasbuh1hhjWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhMbubh)}(hraw_atomic64_fetch_andnoth]j)}(hjWh]hraw_atomic64_fetch_andnot}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjWhMbubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj0XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2XmodnameN classnameNjwjz)}j}]jWc.raw_atomic64_fetch_andnotasbuh1hhj)XubjQ)}(h h]h }(hjNXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)Xubj)}(hjh]hi}(hj\XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%Xubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjwXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjyXmodnameN classnameNjwjz)}j}]jWc.raw_atomic64_fetch_andnotasbuh1hhjpXubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpXubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%Xubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhjWhMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjWhMbubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhMbhjWhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbhjXhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjXubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjYh]hs64 i}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchjYubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj3YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/YhMchj0Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhj/YhMchjYubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjSYh]h atomic64_t *v}(hjUYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQYubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjMYubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhYhMdhjiYubah}(h]h ]h"]h$]h&]uh1jhjMYubeh}(h]h ]h"]h$]h&]uh1jhjhYhMdhjYubeh}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjXubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh to (}(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh & }(hjYhhhNhNubj)}(h**~i**h]h~i}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh) with full ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjXubjM)}(hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjXubjM)}(h **Return**h]j)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjXubjM)}(hThe original value of **v**.h](hThe original value of }(hjZhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic64_fetch_andnot_acquire (C function)#c.raw_atomic64_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hbmodnameN classnameNjwjz)}j}]jbc.raw_atomic64_orasbuh1hhj5bubjQ)}(h h]h }(hjZbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5bubj)}(hjh]h*}(hjhbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5bubj)}(hjh]hv}(hjubhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5bubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjahMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjahMubah}(h]jaah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahMhjahhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjahMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_or() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjbh]hs64 i}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjch]h atomic64_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1chhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-chMhj.cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj-chMhjbubeh}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hjSch]h Description}(hjUchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQcubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjichhhNhNubj)}(h**v**h]hv}(hjqchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjicubh to (}(hjichhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjicubh | }(hjichhhNhNubj)}(h**i**h]hi}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjicubh) with relaxed ordering.}(hjichhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hiubjQ)}(h h]h }(hjcihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>iubj)}(hjh]hi}(hjqihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>iubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:iubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjimodnameN classnameNjwjz)}j}]jic.raw_atomic64_fetch_or_releaseasbuh1hhjiubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]hv}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:iubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjihMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjihMubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihMhjhhhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjihMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj/jh]hs64 i}(hj1jhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-jubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)jubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjHjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDjhMhjEjubah}(h]h ]h"]h$]h&]uh1jhj)jubeh}(h]h ]h"]h$]h&]uh1jhjDjhMhj&jubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjhjh]h atomic64_t *v}(hjjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}jhMhj~jubah}(h]h ]h"]h$]h&]uh1jhjbjubeh}(h]h ]h"]h$]h&]uh1jhj}jhMhj&jubeh}(h]h ]h"]h$]h&]uh1jhj jubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh to (}(hjjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh | }(hjjhhhNhNubj)}(h**i**h]hi}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh) with release ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubjM)}(hJSafe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubjM)}(h **Return**h]j)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj kubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubjM)}(hThe original value of **v**.h](hThe original value of }(hj%khhhNhNubj)}(h**v**h]hv}(hj-khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%kubh.}(hj%khhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj jubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic64_fetch_or_relaxed (C function)c.raw_atomic64_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8s64 raw_atomic64_fetch_or_relaxed (s64 i, atomic64_t *v)h]h)}(h7s64 raw_atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjikhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkkmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_or_relaxedsbc.raw_atomic64_fetch_or_relaxedasbuh1hhjbkhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*ubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbkhhhjkhM*ubh)}(hraw_atomic64_fetch_or_relaxedh]j)}(hjkh]hraw_atomic64_fetch_or_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbkhhhjkhM*ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]jkc.raw_atomic64_fetch_or_relaxedasbuh1hhjkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]hi}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlmodnameN classnameNjwjz)}j}]jkc.raw_atomic64_fetch_or_relaxedasbuh1hhjkubjQ)}(h h]h }(hj lhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hj.lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]hv}(hj;lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubeh}(h]h ]h"]h$]h&]jjuh1j3hjbkhhhjkhM*ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^khhhjkhM*ubah}(h]jYkah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjkhM*hj[khhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjdlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjalhhubah}(h]h ]h"]h$]h&]uh1j3hj[khhhjkhM*ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|ljHj|ljIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjlubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjlh]hs64 i}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(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]jM)}(h s64 valueh]h s64 value}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM+hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM+hjlubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjlh]h atomic64_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM,hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM,hjlubeh}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjlubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj/mhhhNhNubj)}(h**v**h]hv}(hj7mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/mubh to (}(hj/mhhhNhNubj)}(h**v**h]hv}(hjImhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/mubh | }(hj/mhhhNhNubj)}(h**i**h]hi}(hj[mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/mubh) with relaxed ordering.}(hj/mhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjlubjM)}(hJSafe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere.}(hjtmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjlubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjlubjM)}(hThe original value of **v**.h](hThe original value of }(hjmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_xor (C function)c.raw_atomic64_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void raw_atomic64_xor (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_xor(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjmhMAubh)}(hraw_atomic64_xorh]j)}(hraw_atomic64_xorh]hraw_atomic64_xor}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmhhhjmhMAubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsjmsbc.raw_atomic64_xorasbuh1hhjnubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhj=uhMubh)}(hraw_atomic64_fetch_xor_releaseh]j)}(hj:uh]hraw_atomic64_fetch_xor_release}(hjPuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhj=uhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjnuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpumodnameN classnameNjwjz)}j}]j8u c.raw_atomic64_fetch_xor_releaseasbuh1hhjguubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjguubj)}(hjh]hi}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjguubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcuubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j8u c.raw_atomic64_fetch_xor_releaseasbuh1hhjuubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcuubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhj=uhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhj=uhMubah}(h]j uah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=uhMhjuhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhj=uhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/vjHj/vjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj9vh]h Parameters}(hj;vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7vubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjXvh]hs64 i}(hjZvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjRvubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjqvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmvhMhjnvubah}(h]h ]h"]h$]h&]uh1jhjRvubeh}(h]h ]h"]h$]h&]uh1jhjmvhMhjOvubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjvh]h atomic64_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjOvubeh}(h]h ]h"]h$]h&]uh1jhj3vubjM)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to (}(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh ^ }(hjvhhhNhNubj)}(h**i**h]hi}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh) with release ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere.}(hj'whhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubjM)}(h **Return**h]j)}(hj8wh]hReturn}(hj:whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6wubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubjM)}(hThe original value of **v**.h](hThe original value of }(hjNwhhhNhNubj)}(h**v**h]hv}(hjVwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNwubh.}(hjNwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_xor_relaxed (C function) c.raw_atomic64_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_xor_relaxedsb c.raw_atomic64_fetch_xor_relaxedasbuh1hhjwhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjwhMubh)}(hraw_atomic64_fetch_xor_relaxedh]j)}(hjwh]hraw_atomic64_fetch_xor_relaxed}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjwhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]jw c.raw_atomic64_fetch_xor_relaxedasbuh1hhjwubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]hi}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-xmodnameN classnameNjwjz)}j}]jw c.raw_atomic64_fetch_xor_relaxedasbuh1hhj$xubjQ)}(h h]h }(hjIxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$xubj)}(hjh]h*}(hjWxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$xubj)}(hjh]hv}(hjdxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjwhMubah}(h]jwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhjwhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjxh]hs64 i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjyh]h atomic64_t *v}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubjM)}(h**Description**h]j)}(hjByh]h Description}(hjDyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@yubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjXyhhhNhNubj)}(h**v**h]hv}(hj`yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXyubh to (}(hjXyhhhNhNubj)}(h**v**h]hv}(hjryhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXyubh ^ }(hjXyhhhNhNubj)}(h**i**h]hi}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXyubh) with relaxed ordering.}(hjXyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubjM)}(h **Return**h]j)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubjM)}(hThe original value of **v**.h](hThe original value of }(hjyhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_xchg (C function)c.raw_atomic64_xchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 raw_atomic64_xchg (atomic64_t *v, s64 new)h]h)}(h-s64 raw_atomic64_xchg(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj zmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchgsbc.raw_atomic64_xchgasbuh1hhjzhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj*zhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhj)zhMubh)}(hraw_atomic64_xchgh]j)}(hj&zh]hraw_atomic64_xchg}(hjSafe to use in noinstr code; prefer atomic64_xchg() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj {ubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj {ubjM)}(hThe original value of **v**.h](hThe original value of }(hj)|hhhNhNubj)}(h**v**h]hv}(hj1|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)|ubh.}(hj)|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj {ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_xchg_acquire (C function)c.raw_atomic64_xchg_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjm|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjo|modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_acquiresbc.raw_atomic64_xchg_acquireasbuh1hhjf|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf|hhhj|hMubh)}(hraw_atomic64_xchg_acquireh]j)}(hj|h]hraw_atomic64_xchg_acquire}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjf|hhhj|hMubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j|c.raw_atomic64_xchg_acquireasbuh1hhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j|c.raw_atomic64_xchg_acquireasbuh1hhj }ubjQ)}(h h]h }(hj1}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj }ubj)}(hnewh]hnew}(hj?}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjf|hhhj|hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjb|hhhj|hMubah}(h]j]|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hMhj_|hhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hji}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjf}hhubah}(h]h ]h"]h$]h&]uh1j3hj_|hhhj|hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj}h]h atomic64_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj}h]hs64 new}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}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]jM)}(hs64 value to assignh]hs64 value to assign}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hj~h]h Description}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj4~hhhNhNubj)}(h**v**h]hv}(hj<~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4~ubh to }(hj4~hhhNhNubj)}(h**new**h]hnew}(hjN~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4~ubh with acquire ordering.}(hj4~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.}(hjg~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(h **Return**h]j)}(hjx~h]hReturn}(hjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv~ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hThe original value of **v**.h](hThe original value of }(hj~hhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_xchg_release (C function)c.raw_atomic64_xchg_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_releasesbc.raw_atomic64_xchg_releaseasbuh1hhj~hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hMubh)}(hraw_atomic64_xchg_releaseh]j)}(hj~h]hraw_atomic64_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hMubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j~c.raw_atomic64_xchg_releaseasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j~c.raw_atomic64_xchg_releaseasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhj~hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hMubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMhj~hhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjHh]hs64 new}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjBubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.}(hj̀hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj݀h]hReturn}(hj߀hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۀubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_xchg_relaxed (C function)c.raw_atomic64_xchg_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_relaxedsbc.raw_atomic64_xchg_relaxedasbuh1hhj0hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjXhM ubh)}(hraw_atomic64_xchg_relaxedh]j)}(hjUh]hraw_atomic64_xchg_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjXhM ubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jSc.raw_atomic64_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj݁hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjځubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj߁modnameN classnameNjwjz)}j}]jSc.raw_atomic64_xchg_relaxedasbuh1hhjցubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjցubj)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjցubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjXhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjXhM ubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhM hj)hhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0hhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjXhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjth]h atomic64_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM hjkubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hjƂhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj‚hM hjÂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj‚hM hjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(hThe original value of **v**.h](hThe original value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic64_cmpxchg (C function)c.raw_atomic64_cmpxchghNtauh1hhjhhhNhNubh)}(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)6h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchgsbc.raw_atomic64_cmpxchgasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_cmpxchgh]j)}(hjh]hraw_atomic64_cmpxchg}(hjЃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̃ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhj;ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(holdh]hold}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj݄hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj!h]h atomic64_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM!hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM!hjubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjZh]hs64 old}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjTubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohM"hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM"hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj΅h]h Description}(hjЅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̅ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubjM)}(hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_acquire (C function)c.raw_atomic64_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_acquiresbc.raw_atomic64_cmpxchg_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=ubjQ)}(h h]h }(hjچhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjنhM=ubh)}(hraw_atomic64_cmpxchg_acquireh]j)}(hjֆh]hraw_atomic64_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjنhM=ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jԆc.raw_atomic64_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]jԆc.raw_atomic64_cmpxchg_acquireasbuh1hhjWubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jԆc.raw_atomic64_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjćhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hj҇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjنhM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjنhM=ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjنhM=hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjنhM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj=h]h atomic64_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj7ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhM>hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM>hj4ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjvh]hs64 old}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjpubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj4ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hjȈhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjĈhM@hjňubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĈhM@hj4ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_release (C function)c.raw_atomic64_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjԉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjщubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj։modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_releasesbc.raw_atomic64_cmpxchg_releaseasbuh1hhj͉hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj͉hhhjhMZubh)}(hraw_atomic64_cmpxchg_releaseh]j)}(hjh]hraw_atomic64_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj͉hhhjhMZubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjŠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjĊmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj͉hhhjhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjɉhhhjhMZubah}(h]jĉah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMZhjƉhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1j3hjƉhhhjhMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj4ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjYh]h atomic64_t *v}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhM[hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM[hjPubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjPubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjˋh]hs64 new}(hj͋hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjɋ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]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjŋubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hj4ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj4ubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahj4ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchj4ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_relaxed (C function)c.raw_atomic64_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_relaxedsbc.raw_atomic64_cmpxchg_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMvubh)}(hraw_atomic64_cmpxchg_relaxedh]j)}(hjh]hraw_atomic64_cmpxchg_relaxed}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMvubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhj;ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]hv}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjލhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۍubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhj׍ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj׍ubj)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׍ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMvubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMvhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhj1hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMvubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjPubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjuh]h atomic64_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjlubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjǎhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjÎhMxhjĎubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjÎhMxhjlubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMyhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjlubeh}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjPubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj8hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh == }(hj8hhhNhNubj)}(h**old**h]hold}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh), atomically updates }(hj8hhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh to }(hj8hhhNhNubj)}(h**new**h]hnew}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh# with relaxed ordering. Otherwise, }(hj8hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh2 is not modified and relaxed ordering is provided.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjPubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hjPubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjPubjM)}(hThe original value of **v**.h](hThe original value of }(hjȏhhhNhNubj)}(h**v**h]hv}(hjЏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȏubh.}(hjȏhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%raw_atomic64_try_cmpxchg (C function)c.raw_atomic64_try_cmpxchghNtauh1hhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_try_cmpxchgh]j)}(hraw_atomic64_try_cmpxchgh]hraw_atomic64_try_cmpxchg}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]j)}jsj+sbc.raw_atomic64_try_cmpxchgasbuh1hhjAubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jdc.raw_atomic64_try_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjʐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hjאhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jdc.raw_atomic64_try_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjÑh]hs64 *old}(hjőhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjܑhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjؑ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]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubjM)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubjM)}(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 (}(hjMhhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh == }(hjMhhhNhNubj)}(h**old**h]hold}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh), atomically updates }(hjMhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh to }(hjMhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh with full ordering. Otherwise, }(hjMhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh is not modified, }(hjMhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh$ is updated to the current value of }(hjMhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh#, and relaxed ordering is provided.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubjM)}(hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.}(hjڒhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_try_cmpxchg_acquire (C function)"c.raw_atomic64_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhj]hMubh)}(h raw_atomic64_try_cmpxchg_acquireh]j)}(h raw_atomic64_try_cmpxchg_acquireh]h raw_atomic64_try_cmpxchg_acquire}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhj]hMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjrsb"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjʓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjޓubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjޓubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޓubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޓubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhj3ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hnewh]hnew}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjLhhhj]hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhj]hMubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]hMhjEhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhj]hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjєh]h atomic64_t *v}(hjӔhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjϔ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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˔ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjȔubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hj h]hs64 *old}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjȔubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjCh]hs64 new}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(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]jM)}(hs64 value to assignh]hs64 value to assign}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjȔubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjҕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh if the exchange occurred, }(hjHhhhNhNubj)}(h **false**h]hfalse}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh otherwise.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_try_cmpxchg_release (C function)"c.raw_atomic64_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_release (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_releaseh]j)}(h raw_atomic64_try_cmpxchg_releaseh]h raw_atomic64_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj֖hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӖubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjؖmodnameN classnameNjwjz)}j}]j)}jsjsb"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjϖubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϖubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϖubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϖubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj˖ubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj%ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(holdh]hold}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj˖ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj˖ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjחhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԗhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-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]jS)}(hjQh]hs64 *old}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjKubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjŘh]h Description}(hjǘhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjØubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjۘhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh == }(hjۘhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh), atomically updates }(hjۘhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh to }(hjۘhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh# with release ordering. Otherwise, }(hjۘhhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh is not modified, }(hjۘhhhNhNubj)}(h**old**h]hold}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh$ is updated to the current value of }(hjۘhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۘubh#, and relaxed ordering is provided.}(hjۘhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_try_cmpxchg_relaxed (C function)"c.raw_atomic64_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjޙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڙhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjڙhhhjhMubh)}(h raw_atomic64_try_cmpxchg_relaxedh]j)}(h raw_atomic64_try_cmpxchg_relaxedh]h raw_atomic64_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjڙhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j9"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjȚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŚubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjʚmodnameN classnameNjwjz)}j}]j9"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjڙhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj֙hhhjhMubah}(h]jљah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjәhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjәhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj_h]h atomic64_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjh]hs64 *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjћh]hs64 new}(hjӛhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjϛ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]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˛ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj"hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh == }(hj"hhhNhNubj)}(h**old**h]hold}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh), atomically updates }(hj"hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh to }(hj"hhhNhNubj)}(h**new**h]hnew}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh# with relaxed ordering. Otherwise, }(hj"hhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh is not modified, }(hj"hhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh$ is updated to the current value of }(hj"hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh#, and relaxed ordering is provided.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjœhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjڜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֜ubh if the exchange occurred, }(hj֜hhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֜ubh otherwise.}(hj֜hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_sub_and_test (C function)c.raw_atomic64_sub_and_testhNtauh1hhjhhhNhNubh)}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj2hMubh)}(hraw_atomic64_sub_and_testh]j)}(hraw_atomic64_sub_and_testh]hraw_atomic64_sub_and_test}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj2hMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjGsbc.raw_atomic64_sub_and_testasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_sub_and_testasbuh1hhjubjQ)}(h h]h }(hj˝hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjٝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhjhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj2hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjPh]hs64 i}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h**Description**h]j)}(hjĞh]h Description}(hjƞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjžubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjڞhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڞubh to (}(hjڞhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڞubh - }(hjڞhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڞubh) with full ordering.}(hjڞhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubjM)}(hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh if the resulting value of }(hjFhhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh is zero, }(hjFhhhNhNubj)}(h **false**h]hfalse}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh otherwise.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_dec_and_test (C function)c.raw_atomic64_dec_and_testhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM'ubh)}(hraw_atomic64_dec_and_testh]j)}(hraw_atomic64_dec_and_testh]hraw_atomic64_dec_and_test}(hjǟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjßubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM'ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjɟsbc.raw_atomic64_dec_and_testasbuh1hhjߟubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjߟubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߟubj)}(hjh]hv}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߟubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj۟ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM'ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM'ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM'hjhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjGhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM'ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjfubjM)}(h**Description**h]j)}(hjƠh]h Description}(hjȠhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĠubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjfubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjܠhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܠubh to (}(hjܠhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܠubh - 1) with full ordering.}(hjܠhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjfubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjfubjM)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjfubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh if the resulting value of }(hj6hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh is zero, }(hj6hhhNhNubj)}(h **false**h]hfalse}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh otherwise.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_inc_and_test (C function)c.raw_atomic64_inc_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_inc_and_test (atomic64_t *v)h]h)}(h-bool raw_atomic64_inc_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM;ubh)}(hraw_atomic64_inc_and_testh]j)}(hraw_atomic64_inc_and_testh]hraw_atomic64_inc_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM;ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj֡hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӡubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjءmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_inc_and_testasbuh1hhjϡubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϡubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϡubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϡubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjˡubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM;ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM;hjhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hj7hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRjHjRjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj{h]h atomic64_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjrubah}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjVubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj̢hhhNhNubj)}(h**v**h]hv}(hjԢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̢ubh to (}(hj̢hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̢ubh + 1) with full ordering.}(hj̢hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjVubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjVubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjVubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh if the resulting value of }(hj&hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh is zero, }(hj&hhhNhNubj)}(h **false**h]hfalse}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh otherwise.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_add_negative (C function)c.raw_atomic64_add_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_add_negative (s64 i, atomic64_t *v)h]h)}(h4bool raw_atomic64_add_negative(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMOubh)}(hraw_atomic64_add_negativeh]j)}(hraw_atomic64_add_negativeh]hraw_atomic64_add_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMOubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjƣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjãubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjȣmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMOubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMOhj|hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjnhhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjˤhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjǤhMPhjȤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǤhMPhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to (}(hj<hhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh + }(hj<hhhNhNubj)}(h**i**h]hi}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh) with full ordering.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjХhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic64_add_negative_acquire (C function)#c.raw_atomic64_add_negative_acquirehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_unlesssbc.raw_atomic64_fetch_add_unlessasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_fetch_add_unlessh]j)}(hjh]hraw_atomic64_fetch_add_unless}(hjƭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj­ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v, s64 a, s64 u)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhjݭubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjݭubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݭubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݭubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj٭ubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhj1ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjםh]ha}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj٭ubj:)}(hs64 uh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjlh]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj٭ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjԮhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjѮhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjNh]hs64 a}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj¯h]h Description}(hjįhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjدhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh != }(hjدhhhNhNubj)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh), atomically updates }(hjدhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh to (}(hjدhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh + }(hjدhhhNhNubj)}(h**a**h]ha}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh!) with full ordering. Otherwise, }(hjدhhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjدubh2 is not modified and relaxed ordering is provided.}(hjدhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjzhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_add_unless (C function)c.raw_atomic64_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h:bool raw_atomic64_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h9bool raw_atomic64_add_unless(atomic64_t *v, s64 a, s64 u)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjɰhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjȰhMubh)}(hraw_atomic64_add_unlessh]j)}(hraw_atomic64_add_unlessh]hraw_atomic64_add_unless}(hj۰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjװubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjȰhMubj4)}(h(atomic64_t *v, s64 a, s64 u)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjݰsbc.raw_atomic64_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhjIubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjםh]ha}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 uh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjlh]hu}(hjñhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjȰhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjȰhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjȰhMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjȰhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj-h]h atomic64_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjfh]hs64 a}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(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]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj$ubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjڲh]h Description}(hjܲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjزubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_inc_not_zero (C function)c.raw_atomic64_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_inc_not_zeroh]j)}(hraw_atomic64_inc_not_zeroh]hraw_atomic64_inc_not_zero}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_inc_not_zeroasbuh1hhj+ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj״h]h atomic64_t *v}(hjٴhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjմ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]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjѴubeh}(h]h ]h"]h$]h&]uh1jhjhMhjδubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj(hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh != 0), atomically updates }(hj(hhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh to (}(hj(hhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh% + 1) with full ordering. Otherwise, }(hj(hhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh2 is not modified and relaxed ordering is provided.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjεhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_inc_unless_negative (C function)"c.raw_atomic64_inc_unless_negativehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h raw_atomic64_inc_unless_negativeh]j)}(h raw_atomic64_inc_unless_negativeh]h raw_atomic64_inc_unless_negative}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsj)sb"c.raw_atomic64_inc_unless_negativeasbuh1hhj?ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj¶jHj¶jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj̶h]h Parameters}(hjζhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʶubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƶubjM)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh >= 0), atomically updates }(hj<hhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to (}(hj<hhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh% + 1) with full ordering. Otherwise, }(hj<hhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh2 is not modified and relaxed ordering is provided.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubjM)}(hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjзhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƶubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_dec_unless_positive (C function)"c.raw_atomic64_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h4bool raw_atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj(hMubh)}(h raw_atomic64_dec_unless_positiveh]j)}(h raw_atomic64_dec_unless_positiveh]h raw_atomic64_dec_unless_positive}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj(hMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j)}jsj=sb"c.raw_atomic64_dec_unless_positiveasbuh1hhjSubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj(hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMhjhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjָjHjָjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj޸ubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڸubjM)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjڸubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjPhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh <= 0), atomically updates }(hjPhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh to (}(hjPhhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh% - 1) with full ordering. Otherwise, }(hjPhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh2 is not modified and relaxed ordering is provided.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjڸubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjڸubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjڸubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjҹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjιubh if }(hjιhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjιubh was updated, }(hjιhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjιubh otherwise.}(hjιhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjڸubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_dec_if_positive (C function)c.raw_atomic64_dec_if_positivehNtauh1hhjhhhNhNubh)}(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]j)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_if_positivesbc.raw_atomic64_dec_if_positiveasbuh1hhj+hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8ubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhjShM8ubh)}(hraw_atomic64_dec_if_positiveh]j)}(hjPh]hraw_atomic64_dec_if_positive}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhjShM8ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jNc.raw_atomic64_dec_if_positiveasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhjShM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhjShM8ubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShM8hj$hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhjShM8ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/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]jS)}(hj'h]h atomic64_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9hj!ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hM9hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM9hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh > 0), atomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh% - 1) with full ordering. Otherwise, }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh2 is not modified and relaxed ordering is provided.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjubjM)}(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.}(hjϻhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj޻ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_long_read (C function)c.raw_atomic_long_readhNtauh1hhjhhhNhNubh)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjWhKubh)}(hraw_atomic_long_readh]j)}(hraw_atomic_long_readh]hraw_atomic_long_read}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjWhKubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjlsbc.raw_atomic_long_readasbuh1hhjubjQ)}(h h]h }(hjļhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjҼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj߼hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjWhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjWhKubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhKhj>hhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjWhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj$ubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjIh]hconst atomic_long_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjCubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj$ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj$ubjM)}(hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj$ubjM)}(h **Return**h]j)}(hj̽h]hReturn}(hjνhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʽubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj$ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_read_acquire (C function)c.raw_atomic_long_read_acquirehNtauh1hhjhhhNhNubh)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj1hK-ubh)}(hraw_atomic_long_read_acquireh]j)}(hraw_atomic_long_read_acquireh]hraw_atomic_long_read_acquire}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj1hK-ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hj`hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj\ubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubh)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjFsbc.raw_atomic_long_read_acquireasbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj1hK-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hK-ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hK-hjhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-hj߾hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hK-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj#h]hconst atomic_long_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK.hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hK.hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hK.hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK0hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh with acquire ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK/hjubjM)}(hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK3hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjĿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_set (C function)c.raw_atomic_long_sethNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKAubh)}(hraw_atomic_long_seth]j)}(hraw_atomic_long_seth]hraw_atomic_long_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKAubj4)}(h(atomic_long_t *v, long i)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsj sbc.raw_atomic_long_setasbuh1hhj6ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hKAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hKAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKAhjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hKAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKBhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hKBhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKBhj ubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hjOh]hlong i}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKChjIubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhKChjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhKChj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKDhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKFhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKHhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_long_set_release (C function)c.raw_atomic_long_set_releasehNtauh1hhjhhhNhNubh)}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj7hKVubh)}(hraw_atomic_long_set_releaseh]j)}(hraw_atomic_long_set_releaseh]hraw_atomic_long_set_release}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj7hKVubj4)}(h(atomic_long_t *v, long i)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsjLsbc.raw_atomic_long_set_releaseasbuh1hhjbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubj:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj7hKVubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj7hKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hKVhjhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hKVubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjBh]hatomic_long_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhKWhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKWhj9ubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hj{h]hlong i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKXhjuubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhKXhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKYhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK[hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK]hjubjM)}(hNothing.h]hNothing.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_add (C function)c.raw_atomic_long_addhNtauh1hhjhhhNhNubh)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjchKkubh)}(hraw_atomic_long_addh]j)}(hraw_atomic_long_addh]hraw_atomic_long_add}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjchKkubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjxsbc.raw_atomic_long_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjQhhhjchKkubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjchKkubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchKkhjJhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.h hKkhj*hhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjchKkubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjIubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjnh]hlong i}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKlhjhubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKlhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjeubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKmhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKmhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjIubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKnhjIubjM)}(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=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKphjIubjM)}(h **Return**h]j)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKrhjIubjM)}(hNothing.h]hNothing.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKshjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_add_return (C function)c.raw_atomic_long_add_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_add_return (long i, atomic_long_t *v)h]h)}(h9long raw_atomic_long_add_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hraw_atomic_long_add_returnh]j)}(hraw_atomic_long_add_returnh]hraw_atomic_long_add_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_add_returnasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to (}(hj6hhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh + }(hj6hhhNhNubj)}(h**i**h]hi}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh) with full ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_acquire (C function)$c.raw_atomic_long_add_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h"raw_atomic_long_add_return_acquireh]j)}(h"raw_atomic_long_add_return_acquireh]h"raw_atomic_long_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_add_return_acquireasbuh1hhjPubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hj5h]hatomic_long_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj/ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_release (C function)$c.raw_atomic_long_add_return_releasehNtauh1hhjhhhNhNubh)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/hhhjAhKubh)}(h"raw_atomic_long_add_return_releaseh]j)}(h"raw_atomic_long_add_return_releaseh]h"raw_atomic_long_add_return_release}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/hhhjAhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjVsb$c.raw_atomic_long_add_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hj/hhhjAhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhjAhKubah}(h]j&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhKhj(hhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhjAhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#jHj#jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjLh]hlong i}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjFubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjCubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjCubeh}(h]h ]h"]h$]h&]uh1jhj'ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj'ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj'ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj'ubjM)}(h **Return**h]j)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj'ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_relaxed (C function)$c.raw_atomic_long_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_relaxed (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h"raw_atomic_long_add_return_relaxedh]j)}(h"raw_atomic_long_add_return_relaxedh]h"raw_atomic_long_add_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhKubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjxhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjsjHjsjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjwubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj&hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh to (}(hj&hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh + }(hj&hhhNhNubj)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh) with relaxed ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubjM)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_add (C function)c.raw_atomic_long_fetch_addhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hraw_atomic_long_fetch_addh]j)}(hraw_atomic_long_fetch_addh]hraw_atomic_long_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_addasbuh1hhj@ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hj%h]hatomic_long_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to (}(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh + }(hjvhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh) with full ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_add_acquire (C function)#c.raw_atomic_long_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj1hKubh)}(h!raw_atomic_long_fetch_add_acquireh]j)}(h!raw_atomic_long_fetch_add_acquireh]h!raw_atomic_long_fetch_add_acquire}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj1hKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]hi}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjFsb#c.raw_atomic_long_fetch_add_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj1hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj<h]hlong i}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj6ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhj3ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjuh]hatomic_long_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjoubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_add_release (C function)#c.raw_atomic_long_fetch_add_releasehNtauh1hhjhhhNhNubh)}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhKubh)}(h!raw_atomic_long_fetch_add_releaseh]j)}(h!raw_atomic_long_fetch_add_releaseh]h!raw_atomic_long_fetch_add_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_add_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhKubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_add_relaxed (C function)#c.raw_atomic_long_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_add_relaxedh]j)}(h!raw_atomic_long_fetch_add_relaxedh]h!raw_atomic_long_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_add_relaxedasbuh1hhj0ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjfhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh to (}(hjfhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh + }(hjfhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh) with relaxed ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_sub (C function)c.raw_atomic_long_subhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj!hM(ubh)}(hraw_atomic_long_subh]j)}(hraw_atomic_long_subh]hraw_atomic_long_sub}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj!hM(ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]hi}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj6sbc.raw_atomic_long_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj!hM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj!hM(ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hM(hjhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj!hM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj,h]hlong i}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj&ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhM)hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM)hj#ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjeh]hatomic_long_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhM*hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM*hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM/hjubjM)}(hNothing.h]hNothing.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_sub_return (C function)c.raw_atomic_long_sub_returnhNtauh1hhjhhhNhNubh)}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhj_hM=ubh)}(hraw_atomic_long_sub_returnh]j)}(hraw_atomic_long_sub_returnh]hraw_atomic_long_sub_return}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhj_hM=ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjtsbc.raw_atomic_long_sub_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjMhhhj_hM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhj_hM=ubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_hM=hjFhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hj&hhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhj_hM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjEubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjjh]hlong i}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hjdubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjaubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjaubeh}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjEubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjEubjM)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhjEubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMDhjEubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj`hhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_acquire (C function)$c.raw_atomic_long_sub_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMRubh)}(h"raw_atomic_long_sub_return_acquireh]j)}(h"raw_atomic_long_sub_return_acquireh]h"raw_atomic_long_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMRubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMRubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMRhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMShjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to (}(hjDhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh - }(hjDhhhNhNubj)}(h**i**h]hi}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh) with acquire ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMYhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_release (C function)$c.raw_atomic_long_sub_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMgubh)}(h"raw_atomic_long_sub_return_releaseh]j)}(h"raw_atomic_long_sub_return_releaseh]h"raw_atomic_long_sub_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMgubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]hi}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_sub_return_releaseasbuh1hhj^ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMgubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMghjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj h]hlong i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjCh]hatomic_long_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihj=ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMihjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMihjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMnhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_relaxed (C function)$c.raw_atomic_long_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhjOhM|ubh)}(h"raw_atomic_long_sub_return_relaxedh]j)}(h"raw_atomic_long_sub_return_relaxedh]h"raw_atomic_long_sub_return_relaxed}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhjOhM|ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjdsb$c.raw_atomic_long_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hj=hhhjOhM|ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhjOhM|ubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhM|hj6hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjhhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhjOhM|ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjZh]hlong i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjTubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohM}hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM}hjQubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubjM)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubjM)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjPhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_sub (C function)c.raw_atomic_long_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_fetch_subh]j)}(hraw_atomic_long_fetch_subh]hraw_atomic_long_fetch_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_subasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh - }(hj4hhhNhNubj)}(h**i**h]hi}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with full ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_acquire (C function)#c.raw_atomic_long_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_sub_acquireh]j)}(h!raw_atomic_long_fetch_sub_acquireh]h!raw_atomic_long_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_sub_acquireasbuh1hhjNubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj3h]hatomic_long_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_release (C function)#c.raw_atomic_long_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj?hMubh)}(h!raw_atomic_long_fetch_sub_releaseh]j)}(h!raw_atomic_long_fetch_sub_releaseh]h!raw_atomic_long_fetch_sub_release}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj?hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjTsb#c.raw_atomic_long_fetch_sub_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(h]h ]h"]h$]h&]jjuh1j3hj-hhhj?hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj?hMubah}(h]j$ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hMhj&hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj?hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjJh]hlong i}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj}ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubjM)}(h **Return**h]j)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubjM)}(hThe original value of **v**.h](hThe original value of }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_relaxed (C function)#c.raw_atomic_long_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhMubh)}(h!raw_atomic_long_fetch_sub_relaxedh]j)}(h!raw_atomic_long_fetch_sub_relaxedh]h!raw_atomic_long_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj}hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjhMubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjvhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh - }(hj$hhhNhNubj)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_inc (C function)c.raw_atomic_long_inchNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_inch]j)}(hraw_atomic_long_inch]hraw_atomic_long_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_incasbuh1hhj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNothing.h]hNothing.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_inc_return (C function)c.raw_atomic_long_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_inc_return (atomic_long_t *v)h]h)}(h1long raw_atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_inc_returnh]j)}(hraw_atomic_long_inc_returnh]hraw_atomic_long_inc_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_inc_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjuh]hatomic_long_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_inc_return_acquire (C function)$c.raw_atomic_long_inc_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhjohM ubh)}(h"raw_atomic_long_inc_return_acquireh]j)}(h"raw_atomic_long_inc_return_acquireh]h"raw_atomic_long_inc_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhjohM ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_inc_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj]hhhjohM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjohM ubah}(h]jTah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjohM hjVhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjVhhhjohM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjFh]hatomic_long_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj@ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_inc_return_release (C function)$c.raw_atomic_long_inc_return_releasehNtauh1hhjhhhNhNubh)}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj@hM!ubh)}(h"raw_atomic_long_inc_return_releaseh]j)}(h"raw_atomic_long_inc_return_releaseh]h"raw_atomic_long_inc_return_release}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhj@hM!ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsjUsb$c.raw_atomic_long_inc_return_releaseasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubah}(h]h ]h"]h$]h&]jjuh1j3hj.hhhj@hM!ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj@hM!ubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hM!hj'hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hjhhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj@hM!ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM"hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM"hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh to (}(hjhhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh + 1) with release ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_inc_return_relaxed (C function)$c.raw_atomic_long_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM5ubh)}(h"raw_atomic_long_inc_return_relaxedh]j)}(h"raw_atomic_long_inc_return_relaxedh]h"raw_atomic_long_inc_return_relaxed}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM5ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsj&sb$c.raw_atomic_long_inc_return_relaxedasbuh1hhj<ubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM5ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj9hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh to (}(hj9hhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh + 1) with relaxed ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hjubjM)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjubjM)}(h **Return**h]j)}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_inc (C function)c.raw_atomic_long_fetch_inchNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMIubh)}(hraw_atomic_long_fetch_inch]j)}(hraw_atomic_long_fetch_inch]hraw_atomic_long_fetch_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMIubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_incasbuh1hhj ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMIubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMIhjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjuhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + 1) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhjubjM)}(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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjubjM)}(h **Return**h]j)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjdhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_inc_acquire (C function)#c.raw_atomic_long_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM]ubh)}(h!raw_atomic_long_fetch_inc_acquireh]j)}(h!raw_atomic_long_fetch_inc_acquireh]h!raw_atomic_long_fetch_inc_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM]ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_inc_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM]ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM]ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM]hjhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjFhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjeubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjeubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjeubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjeubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjeubjM)}(h **Return**h]j)}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjeubjM)}(hThe original value of **v**.h](hThe original value of }(hj5hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_inc_release (C function)#c.raw_atomic_long_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjhMqubh)}(h!raw_atomic_long_fetch_inc_releaseh]j)}(h!raw_atomic_long_fetch_inc_releaseh]h!raw_atomic_long_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjhMqubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_inc_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjhMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhjhMqubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMqhjkhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1j3hjkhhhjhMqubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj6ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj[h]hatomic_long_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMrhjUubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphMrhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMrhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthj6ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshj6ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj6ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj6ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_inc_relaxed (C function)#c.raw_atomic_long_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjUhMubh)}(h!raw_atomic_long_fetch_inc_relaxedh]j)}(h!raw_atomic_long_fetch_inc_relaxedh]h!raw_atomic_long_fetch_inc_relaxed}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjUhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjjsb#c.raw_atomic_long_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubah}(h]h ]h"]h$]h&]jjuh1j3hjChhhjUhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjUhMubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMhj<hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjUhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj,h]hatomic_long_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh to (}(hj}hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh + 1) with relaxed ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_dec (C function)c.raw_atomic_long_dechNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj&hMubh)}(hraw_atomic_long_dech]j)}(hraw_atomic_long_dech]hraw_atomic_long_dec}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj&hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsj;sbc.raw_atomic_long_decasbuh1hhjQubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj&hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj&hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hMhj hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjNhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh to (}(hjNhhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh - 1) with relaxed ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_dec_return (C function)c.raw_atomic_long_dec_returnhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_dec_returnh]j)}(hraw_atomic_long_dec_returnh]hraw_atomic_long_dec_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_dec_returnasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjghhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_dec_return_acquire (C function)$c.raw_atomic_long_dec_return_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h"raw_atomic_long_dec_return_acquireh]j)}(h"raw_atomic_long_dec_return_acquireh]h"raw_atomic_long_dec_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_dec_return_release (C function)$c.raw_atomic_long_dec_return_releasehNtauh1hhjhhhNhNubh)}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhMubh)}(h"raw_atomic_long_dec_return_releaseh]j)}(h"raw_atomic_long_dec_return_releaseh]h"raw_atomic_long_dec_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_dec_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhMubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjnhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj^h]hatomic_long_t *v}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_dec_return_relaxed (C function)$c.raw_atomic_long_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjXhMubh)}(h"raw_atomic_long_dec_return_relaxedh]j)}(h"raw_atomic_long_dec_return_relaxedh]h"raw_atomic_long_dec_return_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjXhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjmsb$c.raw_atomic_long_dec_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjXhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjXhMubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhMhj?hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhjXhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj/h]hatomic_long_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_dec (C function)c.raw_atomic_long_fetch_dechNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj)hMubh)}(hraw_atomic_long_fetch_dech]j)}(hraw_atomic_long_fetch_dech]hraw_atomic_long_fetch_dec}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj)hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]j)}jsj>sbc.raw_atomic_long_fetch_decasbuh1hhjTubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj)hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj)hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMhjhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj)hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjQhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh to (}(hjQhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh - 1) with full ordering.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_dec_acquire (C function)#c.raw_atomic_long_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_dec_acquireh]j)}(h!raw_atomic_long_fetch_dec_acquireh]h!raw_atomic_long_fetch_dec_acquire}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj. modnameN classnameNjwjz)}j}]j)}jsj sb#c.raw_atomic_long_fetch_dec_acquireasbuh1hhj% ubjQ)}(h h]h }(hjL hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj% ubj)}(hjh]h*}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% ubj)}(hjh]hv}(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj! ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj" hhhNhNubj)}(h**v**h]hv}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubh to (}(hj" hhhNhNubj)}(h**v**h]hv}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubh - 1) with acquire ordering.}(hj" hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(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.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h **Return**h]j)}(hjf h]hReturn}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj| hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubh.}(hj| hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_dec_release (C function)#c.raw_atomic_long_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_release (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hM%ubh)}(h!raw_atomic_long_fetch_dec_releaseh]j)}(h!raw_atomic_long_fetch_dec_releaseh]h!raw_atomic_long_fetch_dec_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hM%ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sb#c.raw_atomic_long_fetch_dec_releaseasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hM%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hM%ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM%hj hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj^ hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjy jHjy jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 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} ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hj} ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj} ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj} ubjM)}(h **Return**h]j)}(hj7 h]hReturn}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hj} ubjM)}(hThe original value of **v**.h](hThe original value of }(hjM hhhNhNubj)}(h**v**h]hv}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj} ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_dec_relaxed (C function)#c.raw_atomic_long_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hM9ubh)}(h!raw_atomic_long_fetch_dec_relaxedh]j)}(h!raw_atomic_long_fetch_dec_relaxedh]h!raw_atomic_long_fetch_dec_relaxed}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hM9ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sb#c.raw_atomic_long_fetch_dec_relaxedasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hM9ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hM9ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM9hj hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj/ hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM9ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJ jHjJ jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjT h]h Parameters}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjN ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjs h]hatomic_long_t *v}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjq ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hjm ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM:hj ubah}(h]h ]h"]h$]h&]uh1jhjm ubeh}(h]h ]h"]h$]h&]uh1jhj hM:hjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjN ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjN ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjN ubjM)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjN ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjN ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_and (C function)c.raw_atomic_long_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_and (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjmhMMubh)}(hraw_atomic_long_andh]j)}(hraw_atomic_long_andh]hraw_atomic_long_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjmhMMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjmhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjmhMMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmhMMhjThhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj4hhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjmhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjSubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjxh]hlong i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhjrubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjoubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjoubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjSubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjSubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjSubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThjSubjM)}(hNothing.h]hNothing.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_and (C function)c.raw_atomic_long_fetch_andhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMbubh)}(hraw_atomic_long_fetch_andh]j)}(hraw_atomic_long_fetch_andh]hraw_atomic_long_fetch_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMbubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_andasbuh1hhj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMbubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMbhjhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh & }(hj@hhhNhNubj)}(h**i**h]hi}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh) with full ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_and_acquire (C function)#c.raw_atomic_long_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMwubh)}(h!raw_atomic_long_fetch_and_acquireh]j)}(h!raw_atomic_long_fetch_and_acquireh]h!raw_atomic_long_fetch_and_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMwubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]hi}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_and_acquireasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMwubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMwubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMwhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMwubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj?h]hatomic_long_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMyhj9ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMyhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_and_release (C function)#c.raw_atomic_long_fetch_and_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_and_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_and_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhjKhMubh)}(h!raw_atomic_long_fetch_and_releaseh]j)}(h!raw_atomic_long_fetch_and_releaseh]h!raw_atomic_long_fetch_and_release}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhjKhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj`sb#c.raw_atomic_long_fetch_and_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhjKhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhjKhMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhMhj2hhubj4)}(hhh]jM)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhjKhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjVh]hlong i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubj)}(hhh]jM)}(h long valueh]h long value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(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%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hThe original value of **v**.h](hThe original value of }(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_and_relaxed (C function)#c.raw_atomic_long_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_and_relaxedh]j)}(h!raw_atomic_long_fetch_and_relaxedh]h!raw_atomic_long_fetch_and_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_and_relaxedasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh & }(hj0hhhNhNubj)}(h**i**h]hi}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh) with relaxed ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic_long_andnot (C function)c.raw_atomic_long_andnothNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_andnoth]j)}(hraw_atomic_long_andnoth]hraw_atomic_long_andnot}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_andnotasbuh1hhjJubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj/h]hatomic_long_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_fetch_andnot (C function)c.raw_atomic_long_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(hsbc.raw_atomic_long_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj)hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj)hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMhjhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj)hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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_andnot() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj4h]hlong i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.ubj)}(hhh]jM)}(h long valueh]h long value}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjmh]hatomic_long_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hISafe to use in noinstr code; prefer atomic_long_fetch_andnot() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_fetch_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj*hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_fetch_andnot_acquire (C function)&c.raw_atomic_long_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_acquire (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubh)}(h$raw_atomic_long_fetch_andnot_acquireh]j)}(h$raw_atomic_long_fetch_andnot_acquireh]h$raw_atomic_long_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjyhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb&c.raw_atomic_long_fetch_andnot_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjghhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjyhMubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhj`hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj[jHj[jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj~ubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(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]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh & }(hj hhhNhNubj)}(h**~i**h]h~i}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with acquire ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubjM)}(h **Return**h]j)}(hjd h]hReturn}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubjM)}(hThe original value of **v**.h](hThe original value of }(hjz hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh.}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_fetch_andnot_release (C function)&c.raw_atomic_long_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_release (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(h$raw_atomic_long_fetch_andnot_releaseh]j)}(h$raw_atomic_long_fetch_andnot_releaseh]h$raw_atomic_long_fetch_andnot_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj/!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1!modnameN classnameNjwjz)}j}]j)}jsj sb&c.raw_atomic_long_fetch_andnot_releaseasbuh1hhj(!ubjQ)}(h h]h }(hjO!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(!ubj)}(hjh]h*}(hj]!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(!ubj)}(hjh]hv}(hjj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj!h]hlong i}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!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]jM)}(h long valueh]h long value}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!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]jS)}(hj "h]hatomic_long_t *v}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj "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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj""hMhj#"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj""hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjM)}(h**Description**h]j)}(hjH"h]h Description}(hjJ"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF"ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hj^"hhhNhNubj)}(h**v**h]hv}(hjf"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^"ubh to (}(hj^"hhhNhNubj)}(h**v**h]hv}(hjx"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^"ubh & }(hj^"hhhNhNubj)}(h**~i**h]h~i}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^"ubh) with release ordering.}(hj^"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubjM)}(hThe original value of **v**.h](hThe original value of }(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_fetch_andnot_relaxed (C function)&c.raw_atomic_long_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_relaxed (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hM ubh)}(h$raw_atomic_long_fetch_andnot_relaxedh]j)}(h$raw_atomic_long_fetch_andnot_relaxedh]h$raw_atomic_long_fetch_andnot_relaxed}(hj,#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjH#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#ubjQ)}(h h]h }(hjV#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD#ubj)}(hjh]hi}(hjd#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@#ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsj.#sb&c.raw_atomic_long_fetch_andnot_relaxedasbuh1hhjx#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx#ubj)}(hjh]hv}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@#ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj#hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj#hM ubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hM hj#hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj#hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#jHj#jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj$$h]hlong i}(hj&$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"$ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj$ubj)}(hhh]jM)}(h long valueh]h long value}(hj=$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9$hM hj:$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj9$hM hj$ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj]$h]hatomic_long_t *v}(hj_$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[$ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjW$ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjv$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr$hM hjs$ubah}(h]h ]h"]h$]h&]uh1jhjW$ubeh}(h]h ]h"]h$]h&]uh1jhjr$hM hj$ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjM)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh & }(hj$hhhNhNubj)}(h**~i**h]h~i}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj#ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(hThe original value of **v**.h](hThe original value of }(hj%hhhNhNubj)}(h**v**h]hv}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_long_or (C function)c.raw_atomic_long_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2void raw_atomic_long_or (long i, atomic_long_t *v)h]h)}(h1void raw_atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj[%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW%hhhji%hMubh)}(hraw_atomic_long_orh]j)}(hraw_atomic_long_orh]hraw_atomic_long_or}(hj|%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjW%hhhji%hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]hi}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsj~%sbc.raw_atomic_long_orasbuh1hhj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]hv}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hjW%hhhji%hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjS%hhhji%hMubah}(h]jN%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhji%hMhjP%hhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj3&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj0&hhubah}(h]h ]h"]h$]h&]uh1j3hjP%hhhji%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjK&jHjK&jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjU&h]h Parameters}(hjW&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS&ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjO&ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjt&h]hlong i}(hjv&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjn&ubj)}(hhh]jM)}(h long valueh]h long value}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hM hj&ubah}(h]h ]h"]h$]h&]uh1jhjn&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjk&ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj&h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj&ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hM!hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM!hjk&ubeh}(h]h ]h"]h$]h&]uh1jhjO&ubjM)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjO&ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj&hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh to (}(hj&hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh | }(hj&hhhNhNubj)}(h**i**h]hi}(hj*'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh) with relaxed ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hjO&ubjM)}(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.}(hjC'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjO&ubjM)}(h **Return**h]j)}(hjT'h]hReturn}(hjV'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR'ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hjO&ubjM)}(hNothing.h]hNothing.}(hjj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hjO&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%raw_atomic_long_fetch_or (C function)c.raw_atomic_long_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8long raw_atomic_long_fetch_or (long i, atomic_long_t *v)h]h)}(h7long raw_atomic_long_fetch_or(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj'hM4ubh)}(hraw_atomic_long_fetch_orh]j)}(hraw_atomic_long_fetch_orh]hraw_atomic_long_fetch_or}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj'hM4ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]hi}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj'sbc.raw_atomic_long_fetch_orasbuh1hhj(ubjQ)}(h h]h }(hj-(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj;(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]hv}(hjH(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubeh}(h]h ]h"]h$]h&]jjuh1j3hj'hhhj'hM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhj'hM4ubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hM4hj'hhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjn(hhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj'hM4ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(jHj(jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj(ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj(h]hlong i}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hj(ubj)}(hhh]jM)}(h long valueh]h long value}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hM5hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hM5hj(ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj(h]hatomic_long_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hj(ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hM6hj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hM6hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubjM)}(h**Description**h]j)}(hj&)h]h Description}(hj()hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$)ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj(ubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj<)hhhNhNubj)}(h**v**h]hv}(hjD)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<)ubh to (}(hj<)hhhNhNubj)}(h**v**h]hv}(hjV)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<)ubh | }(hj<)hhhNhNubj)}(h**i**h]hi}(hjh)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<)ubh) with full ordering.}(hj<)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hj(ubjM)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj(ubjM)}(h **Return**h]j)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hj(ubjM)}(hThe original value of **v**.h](hThe original value of }(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic_long_fetch_or_acquire (C function)"c.raw_atomic_long_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj)hMIubh)}(h raw_atomic_long_fetch_or_acquireh]j)}(h raw_atomic_long_fetch_or_acquireh]h raw_atomic_long_fetch_or_acquire}(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj)hMIubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj&*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"*ubjQ)}(h h]h }(hj4*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"*ubj)}(hjh]hi}(hjB*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj]*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_*modnameN classnameNjwjz)}j}]j)}jsj *sb"c.raw_atomic_long_fetch_or_acquireasbuh1hhjV*ubjQ)}(h h]h }(hj}*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV*ubj)}(hjh]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubeh}(h]h ]h"]h$]h&]jjuh1j3hj)hhhj)hMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj)hMIubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMIhj)hhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj*hhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhj)hMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj*ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj+h]hlong i}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhj*ubj)}(hhh]jM)}(h long valueh]h long value}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMJhj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMJhj*ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj;+h]hatomic_long_t *v}(hj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9+ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhj5+ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjT+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjP+hMKhjQ+ubah}(h]h ]h"]h$]h&]uh1jhj5+ubeh}(h]h ]h"]h$]h&]uh1jhjP+hMKhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubjM)}(h**Description**h]j)}(hjv+h]h Description}(hjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt+ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj*ubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hj+hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh to (}(hj+hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh | }(hj+hhhNhNubj)}(h**i**h]hi}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh) with acquire ordering.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhj*ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj*ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhj*ubjM)}(hThe original value of **v**.h](hThe original value of }(hj+hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic_long_fetch_or_release (C function)"c.raw_atomic_long_fetch_or_releasehNtauh1hhjhhhNhNubh)}(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}(hj9,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5,hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^ubjQ)}(h h]h }(hjH,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5,hhhjG,hM^ubh)}(h raw_atomic_long_fetch_or_releaseh]j)}(h raw_atomic_long_fetch_or_releaseh]h raw_atomic_long_fetch_or_release}(hjZ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5,hhhjG,hM^ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjv,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjr,ubj)}(hjh]hi}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjn,ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}jsj\,sb"c.raw_atomic_long_fetch_or_releaseasbuh1hhj,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjn,ubeh}(h]h ]h"]h$]h&]jjuh1j3hj5,hhhjG,hM^ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1,hhhjG,hM^ubah}(h]j,,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjG,hM^hj.,hhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hj-hhubah}(h]h ]h"]h$]h&]uh1j3hj.,hhhjG,hM^ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)-jHj)-jIjJjKuh1hhhhjhNhNubj)}(hX&**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj3-h]h Parameters}(hj5-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj--ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjR-h]hlong i}(hjT-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjL-ubj)}(hhh]jM)}(h long valueh]h long value}(hjk-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjg-hM_hjh-ubah}(h]h ]h"]h$]h&]uh1jhjL-ubeh}(h]h ]h"]h$]h&]uh1jhjg-hM_hjI-ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj-h]hatomic_long_t *v}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hj-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hM`hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM`hjI-ubeh}(h]h ]h"]h$]h&]uh1jhj--ubjM)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj--ubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh to (}(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh | }(hj-hhhNhNubj)}(h**i**h]hi}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh) with release ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahj--ubjM)}(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.}(hj!.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj--ubjM)}(h **Return**h]j)}(hj2.h]hReturn}(hj4.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0.ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj--ubjM)}(hThe original value of **v**.h](hThe original value of }(hjH.hhhNhNubj)}(h**v**h]hv}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH.ubh.}(hjH.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj--ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic_long_fetch_or_relaxed (C function)"c.raw_atomic_long_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj.hMsubh)}(h raw_atomic_long_fetch_or_relaxedh]j)}(h raw_atomic_long_fetch_or_relaxedh]h raw_atomic_long_fetch_or_relaxed}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhj.hMsubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]hi}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j)}jsj.sb"c.raw_atomic_long_fetch_or_relaxedasbuh1hhj.ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hj+/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hj8/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubeh}(h]h ]h"]h$]h&]jjuh1j3hj.hhhj.hMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhj.hMsubah}(h]j|.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMshj~.hhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hja/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshj^/hhubah}(h]h ]h"]h$]h&]uh1j3hj~.hhhj.hMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjy/jHjy/jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj}/ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj/h]hlong i}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/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]jM)}(h long valueh]h long value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMthj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMthj/ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj/h]hatomic_long_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj/ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMuhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMuhj/ubeh}(h]h ]h"]h$]h&]uh1jhj}/ubjM)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj}/ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj,0hhhNhNubj)}(h**v**h]hv}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,0ubh to (}(hj,0hhhNhNubj)}(h**v**h]hv}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,0ubh | }(hj,0hhhNhNubj)}(h**i**h]hi}(hjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,0ubh) with relaxed ordering.}(hj,0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMvhj}/ubjM)}(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.}(hjq0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhj}/ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhj}/ubjM)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj}/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_xor (C function)c.raw_atomic_long_xorhNtauh1hhjhhhNhNubh)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubh)}(hraw_atomic_long_xorh]j)}(hraw_atomic_long_xorh]hraw_atomic_long_xor}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjQ)}(h h]h }(hj$1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]hi}(hj21hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjM1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjO1modnameN classnameNjwjz)}j}]j)}jsj0sbc.raw_atomic_long_xorasbuh1hhjF1ubjQ)}(h h]h }(hjm1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjF1ubj)}(hjh]h*}(hj{1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF1ubj)}(hjh]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj0hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj0hMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMhj0hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj1h]hlong i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh]jM)}(h long valueh]h long value}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj+2h]hatomic_long_t *v}(hj-2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)2ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%2ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjD2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@2hMhjA2ubah}(h]h ]h"]h$]h&]uh1jhj%2ubeh}(h]h ]h"]h$]h&]uh1jhj@2hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjf2h]h Description}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd2ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj|2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|2ubh to (}(hj|2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|2ubh ^ }(hj|2hhhNhNubj)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|2ubh) with relaxed ordering.}(hj|2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hNothing.h]hNothing.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_xor (C function)c.raw_atomic_long_fetch_xorhNtauh1hhjhhhNhNubh)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj&3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj%3hMubh)}(hraw_atomic_long_fetch_xorh]j)}(hraw_atomic_long_fetch_xorh]hraw_atomic_long_fetch_xor}(hj83hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj43ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj%3hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjT3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP3ubjQ)}(h h]h }(hjb3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP3ubj)}(hjh]hi}(hjp3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjL3ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsj:3sbc.raw_atomic_long_fetch_xorasbuh1hhj3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjL3ubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj%3hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj%3hMubah}(h]j 3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%3hMhj 3hhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1j3hj 3hhhj%3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj04h]hlong i}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.4ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj*4ubj)}(hhh]jM)}(h long valueh]h long value}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjE4hMhjF4ubah}(h]h ]h"]h$]h&]uh1jhj*4ubeh}(h]h ]h"]h$]h&]uh1jhjE4hMhj'4ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hji4h]hatomic_long_t *v}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjg4ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc4ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjc4ubeh}(h]h ]h"]h$]h&]uh1jhj~4hMhj'4ubeh}(h]h ]h"]h$]h&]uh1jhj 4ubjM)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh ^ }(hj4hhhNhNubj)}(h**i**h]hi}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with full ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubjM)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubjM)}(hThe original value of **v**.h](hThe original value of }(hj&5hhhNhNubj)}(h**v**h]hv}(hj.5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&5ubh.}(hj&5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_xor_acquire (C function)#c.raw_atomic_long_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(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}(hjg5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc5hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjv5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjc5hhhju5hMubh)}(h!raw_atomic_long_fetch_xor_acquireh]j)}(h!raw_atomic_long_fetch_xor_acquireh]h!raw_atomic_long_fetch_xor_acquire}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjc5hhhju5hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]hi}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsj5sb#c.raw_atomic_long_fetch_xor_acquireasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hv}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubeh}(h]h ]h"]h$]h&]jjuh1j3hjc5hhhju5hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_5hhhju5hMubah}(h]jZ5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhju5hMhj\5hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj?6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<6hhubah}(h]h ]h"]h$]h&]uh1j3hj\5hhhju5hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjW6jHjW6jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hja6h]h Parameters}(hjc6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_6ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj6h]hlong i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~6ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjz6ubj)}(hhh]jM)}(h long valueh]h long value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjz6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjw6ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj6h]hatomic_long_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjw6ubeh}(h]h ]h"]h$]h&]uh1jhj[6ubjM)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hj 7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 7ubh to (}(hj 7hhhNhNubj)}(h**v**h]hv}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 7ubh ^ }(hj 7hhhNhNubj)}(h**i**h]hi}(hj67hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 7ubh) with acquire ordering.}(hj 7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubjM)}(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.}(hjO7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubjM)}(h **Return**h]j)}(hj`7h]hReturn}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^7ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubjM)}(hThe original value of **v**.h](hThe original value of }(hjv7hhhNhNubj)}(h**v**h]hv}(hj~7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv7ubh.}(hjv7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_xor_release (C function)#c.raw_atomic_long_fetch_xor_releasehNtauh1hhjhhhNhNubh)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hMubh)}(h!raw_atomic_long_fetch_xor_releaseh]j)}(h!raw_atomic_long_fetch_xor_releaseh]h!raw_atomic_long_fetch_xor_release}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj+8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-8modnameN classnameNjwjz)}j}]j)}jsj7sb#c.raw_atomic_long_fetch_xor_releaseasbuh1hhj$8ubjQ)}(h h]h }(hjK8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$8ubj)}(hjh]h*}(hjY8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$8ubj)}(hjh]hv}(hjf8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhj7hMubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMhj7hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhj7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj8h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj)}(hhh]jM)}(h long valueh]h long value}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj 9h]hatomic_long_t *v}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hjD9h]h Description}(hjF9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjZ9hhhNhNubj)}(h**v**h]hv}(hjb9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ9ubh to (}(hjZ9hhhNhNubj)}(h**v**h]hv}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ9ubh ^ }(hjZ9hhhNhNubj)}(h**i**h]hi}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ9ubh) with release ordering.}(hjZ9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubjM)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubjM)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubjM)}(hThe original value of **v**.h](hThe original value of }(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_xor_relaxed (C function)#c.raw_atomic_long_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(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}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhj:hMubh)}(h!raw_atomic_long_fetch_xor_relaxedh]j)}(h!raw_atomic_long_fetch_xor_relaxedh]h!raw_atomic_long_fetch_xor_relaxed}(hj(:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhj:hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjD:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@:ubjQ)}(h h]h }(hjR:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@:ubj)}(hjh]hi}(hj`:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<:ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj{:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}:modnameN classnameNjwjz)}j}]j)}jsj*:sb#c.raw_atomic_long_fetch_xor_relaxedasbuh1hhjt:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<:ubeh}(h]h ]h"]h$]h&]jjuh1j3hj:hhhj:hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj:hMubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:hMhj9hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj:hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj ;h]hlong i}(hj";hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;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]jM)}(h long valueh]h long value}(hj9;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5;hMhj6;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj5;hMhj;ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjY;h]hatomic_long_t *v}(hj[;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW;ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjS;ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjr;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjn;hMhjo;ubah}(h]h ]h"]h$]h&]uh1jhjS;ubeh}(h]h ]h"]h$]h&]uh1jhjn;hMhj;ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh ^ }(hj;hhhNhNubj)}(h**i**h]hi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh) with relaxed ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(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;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(h **Return**h]j)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hThe original value of **v**.h](hThe original value of }(hj<hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_long_xchg (C function)c.raw_atomic_long_xchghNtauh1hhjhhhNhNubh)}(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}(hjW<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS<hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjf<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjS<hhhje<hMubh)}(hraw_atomic_long_xchgh]j)}(hraw_atomic_long_xchgh]hraw_atomic_long_xchg}(hjx<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjS<hhhje<hMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsjz<sbc.raw_atomic_long_xchgasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(hlong newh](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hnewh]hnew}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjS<hhhje<hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjO<hhhje<hMubah}(h]jJ<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhje<hMhjL<hhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hj0=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj-=hhubah}(h]h ]h"]h$]h&]uh1j3hjL<hhhje<hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjH=jHjH=jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjR=h]h Parameters}(hjT=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjq=h]hatomic_long_t *v}(hjs=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjo=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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhjk=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjh=ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj=h]hlong new}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=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]jM)}(hlong value to assignh]hlong value to assign}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjh=ubeh}(h]h ]h"]h$]h&]uh1jhjL=ubjM)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to }(hj=hhhNhNubj)}(h**new**h]hnew}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh with full ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubjM)}(hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.}(hj.>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubjM)}(h **Return**h]j)}(hj?>h]hReturn}(hjA>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=>ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubjM)}(hThe original value of **v**.h](hThe original value of }(hjU>hhhNhNubj)}(h**v**h]hv}(hj]>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU>ubh.}(hjU>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjL=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_xchg_acquire (C function)c.raw_atomic_long_xchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj>hMubh)}(hraw_atomic_long_xchg_acquireh]j)}(hraw_atomic_long_xchg_acquireh]hraw_atomic_long_xchg_acquire}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj>hMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsj>sbc.raw_atomic_long_xchg_acquireasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hlong newh](j)}(hlongh]hlong}(hj)?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%?ubjQ)}(h h]h }(hj7?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%?ubj)}(hnewh]hnew}(hjE?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj>hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj>hMubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>hMhj>hhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjo?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjl?hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj>hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj?h]hatomic_long_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj?h]hlong new}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?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]jM)}(hlong value to assignh]hlong value to assign}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hj$@h]h Description}(hj&@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"@ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj?ubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj:@hhhNhNubj)}(h**v**h]hv}(hjB@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:@ubh to }(hj:@hhhNhNubj)}(h**new**h]hnew}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:@ubh with acquire ordering.}(hj:@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj?ubjM)}(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.}(hjm@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj?ubjM)}(h **Return**h]j)}(hj~@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|@ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj?ubjM)}(hThe original value of **v**.h](hThe original value of }(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_xchg_release (C function)c.raw_atomic_long_xchg_releasehNtauh1hhjhhhNhNubh)}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@hhhj@hMubh)}(hraw_atomic_long_xchg_releaseh]j)}(hraw_atomic_long_xchg_releaseh]hraw_atomic_long_xchg_release}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@hhhj@hMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j)}jsj@sbc.raw_atomic_long_xchg_releaseasbuh1hhjAubjQ)}(h h]h }(hj5AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjCAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hv}(hjPAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Aubj:)}(hlong newh](j)}(hlongh]hlong}(hjhAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdAubjQ)}(h h]h }(hjvAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdAubj)}(hnewh]hnew}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Aubeh}(h]h ]h"]h$]h&]jjuh1j3hj@hhhj@hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhj@hMubah}(h]j@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hMhj@hhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhj@hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjAh]hatomic_long_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj(Bh]hlong new}(hj*BhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&Bubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"Bubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjABhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=BhMhj>Bubah}(h]h ]h"]h$]h&]uh1jhj"Bubeh}(h]h ]h"]h$]h&]uh1jhj=BhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hjcBh]h Description}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaBubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjyBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyBubh to }(hjyBhhhNhNubj)}(h**new**h]hnew}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyBubh with release ordering.}(hjyBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjAubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hjAubjM)}(hThe original value of **v**.h](hThe original value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_xchg_relaxed (C function)c.raw_atomic_long_xchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0ubjQ)}(h h]h }(hj#ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhj"ChM0ubh)}(hraw_atomic_long_xchg_relaxedh]j)}(hraw_atomic_long_xchg_relaxedh]hraw_atomic_long_xchg_relaxed}(hj5ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Cubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhj"ChM0ubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjTChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVCmodnameN classnameNjwjz)}j}]j)}jsj7Csbc.raw_atomic_long_xchg_relaxedasbuh1hhjMCubjQ)}(h h]h }(hjtChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMCubj)}(hjh]hv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjICubj:)}(hlong newh](j)}(hlongh]hlong}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hnewh]hnew}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjICubeh}(h]h ]h"]h$]h&]jjuh1j3hjChhhj"ChM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Chhhj"ChM0ubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"ChM0hj Chhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hjChhubah}(h]h ]h"]h$]h&]uh1j3hj Chhhj"ChM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(hX&**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_xchg_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Dubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj Dubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj.Dh]hatomic_long_t *v}(hj0DhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,Dubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hj(Dubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjCDhM1hjDDubah}(h]h ]h"]h$]h&]uh1jhj(Dubeh}(h]h ]h"]h$]h&]uh1jhjCDhM1hj%Dubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjgDh]hlong new}(hjiDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeDubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM2hjaDubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|DhM2hj}Dubah}(h]h ]h"]h$]h&]uh1jhjaDubeh}(h]h ]h"]h$]h&]uh1jhj|DhM2hj%Dubeh}(h]h ]h"]h$]h&]uh1jhj DubjM)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj DubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to }(hjDhhhNhNubj)}(h**new**h]hnew}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh with relaxed ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM3hj DubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hj DubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hj DubjM)}(hThe original value of **v**.h](hThe original value of }(hjEhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_long_cmpxchg (C function)c.raw_atomic_long_cmpxchghNtauh1hhjhhhNhNubh)}(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}(hjSEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOEhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEubjQ)}(h h]h }(hjbEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOEhhhjaEhMEubh)}(hraw_atomic_long_cmpxchgh]j)}(hraw_atomic_long_cmpxchgh]hraw_atomic_long_cmpxchg}(hjtEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOEhhhjaEhMEubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsjvEsbc.raw_atomic_long_cmpxchgasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(hlong oldh](j)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(holdh]hold}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(hlong newh](j)}(hlongh]hlong}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjQ)}(h h]h }(hj)FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hnewh]hnew}(hj7FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubeh}(h]h ]h"]h$]h&]jjuh1j3hjOEhhhjaEhMEubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKEhhhjaEhMEubah}(h]jFEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjaEhMEhjHEhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjaFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhj^Fhhubah}(h]h ]h"]h$]h&]uh1j3hjHEhhhjaEhMEubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyFjHjyFjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj}Fubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjFh]hatomic_long_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhjFubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMFhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMFhjFubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjFh]hlong old}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMGhjFubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMGhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMGhjFubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjGh]hlong new}(hjGhhhNhNuba h}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMHhjGubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj-GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)GhMHhj*Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj)GhMHhjFubeh}(h]h ]h"]h$]h&]uh1jhj}FubjM)}(h**Description**h]j)}(hjOGh]h Description}(hjQGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMGubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhj}FubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjeGhhhNhNubj)}(h**v**h]hv}(hjmGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubh == }(hjeGhhhNhNubj)}(h**old**h]hold}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubh), atomically updates }(hjeGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubh to }(hjeGhhhNhNubj)}(h**new**h]hnew}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubh with full ordering. Otherwise, }(hjeGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubh2 is not modified and relaxed ordering is provided.}(hjeGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj}FubjM)}(hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhj}FubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj}FubjM)}(hThe original value of **v**.h](hThe original value of }(hjGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhj}Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_long_cmpxchg_acquire (C function)!c.raw_atomic_long_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(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}(hj6HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Hhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\ubjQ)}(h h]h }(hjEHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2HhhhjDHhM\ubh)}(hraw_atomic_long_cmpxchg_acquireh]j)}(hraw_atomic_long_cmpxchg_acquireh]hraw_atomic_long_cmpxchg_acquire}(hjWHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2HhhhjDHhM\ubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjvHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxHmodnameN classnameNjwjz)}j}]j)}jsjYHsb!c.raw_atomic_long_cmpxchg_acquireasbuh1hhjoHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoHubj)}(hjh]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkHubj:)}(hlong oldh](j)}(hlongh]hlong}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(holdh]hold}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkHubj:)}(hlong newh](j)}(hlongh]hlong}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjQ)}(h h]h }(hj IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hnewh]hnew}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkHubeh}(h]h ]h"]h$]h&]jjuh1j3hj2HhhhjDHhM\ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.HhhhjDHhM\ubah}(h]j)Hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDHhM\hj+Hhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjDIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\hjAIhhubah}(h]h ]h"]h$]h&]uh1j3hj+HhhhjDHhM\ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\IjHj\IjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjfIh]h Parameters}(hjhIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdIubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hj`Iubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjIh]hatomic_long_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjIubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM]hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM]hj|Iubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjIh]hlong old}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjIubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM^hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM^hj|Iubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjIh]hlong new}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjIubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj JhM_hj Jubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhj JhM_hj|Iubeh}(h]h ]h"]h$]h&]uh1jhj`IubjM)}(h**Description**h]j)}(hj2Jh]h Description}(hj4JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Jubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahj`IubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjHJhhhNhNubj)}(h**v**h]hv}(hjPJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHJubh == }(hjHJhhhNhNubj)}(h**old**h]hold}(hjbJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHJubh), atomically updates }(hjHJhhhNhNubj)}(h**v**h]hv}(hjtJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHJubh to }(hjHJhhhNhNubj)}(h**new**h]hnew}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHJubh# with acquire ordering. Otherwise, }(hjHJhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHJubh2 is not modified and relaxed ordering is provided.}(hjHJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hj`IubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj`IubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj`IubjM)}(hThe original value of **v**.h](hThe original value of }(hjJhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj`Iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_long_cmpxchg_release (C function)!c.raw_atomic_long_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hj(KhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhj'KhMsubh)}(hraw_atomic_long_cmpxchg_releaseh]j)}(hraw_atomic_long_cmpxchg_releaseh]hraw_atomic_long_cmpxchg_release}(hj:KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Kubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhj'KhMsubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjYKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[KmodnameN classnameNjwjz)}j}]j)}jsjNmodnameN classnameNjwjz)}j}]j)}jsjNsb!c.raw_atomic_long_cmpxchg_relaxedasbuh1hhj5NubjQ)}(h h]h }(hj\NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5Nubj)}(hjh]h*}(hjjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Nubj)}(hjh]hv}(hjwNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Nubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1Nubj:)}(hlong oldh](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(holdh]hold}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1Nubj:)}(hlong newh](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hnewh]hnew}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1Nubeh}(h]h ]h"]h$]h&]jjuh1j3hjMhhhj NhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhj NhMubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj NhMhjMhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhj NhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"OjHj"OjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj,Oh]h Parameters}(hj.OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Oubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&Oubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjKOh]hatomic_long_t *v}(hjMOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIOubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjEOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjdOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`OhMhjaOubah}(h]h ]h"]h$]h&]uh1jhjEOubeh}(h]h ]h"]h$]h&]uh1jhj`OhMhjBOubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjOh]hlong old}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj~Oubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhj~Oubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjBOubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjOh]hlong new}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjBOubeh}(h]h ]h"]h$]h&]uh1jhj&OubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&OubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh == }(hjPhhhNhNubj)}(h**old**h]hold}(hj(PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh), atomically updates }(hjPhhhNhNubj)}(h**v**h]hv}(hj:PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh to }(hjPhhhNhNubj)}(h**new**h]hnew}(hjLPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh# with relaxed ordering. Otherwise, }(hjPhhhNhNubj)}(h**v**h]hv}(hj^PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh2 is not modified and relaxed ordering is provided.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&OubjM)}(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.}(hjwPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&OubjM)}(h **Return**h]j)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&OubjM)}(hThe original value of **v**.h](hThe original value of }(hjPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj&Oubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_long_try_cmpxchg (C function)c.raw_atomic_long_try_cmpxchghNtauh1hhjhhhNhNubh)}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhMubh)}(hraw_atomic_long_try_cmpxchgh]j)}(hraw_atomic_long_try_cmpxchgh]hraw_atomic_long_try_cmpxchg}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhMubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj QmodnameN classnameNjwjz)}j}]j)}jsjQsbc.raw_atomic_long_try_cmpxchgasbuh1hhjQubjQ)}(h h]h }(hj>QhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjLQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjYQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubj:)}(h long *oldh](j)}(hlongh]hlong}(hjqQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmQubj)}(holdh]hold}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubj:)}(hlong newh](j)}(hlongh]hlong}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hnewh]hnew}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMhjPhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRjHjRjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhe/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]jS)}(hj:Rh]hatomic_long_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Uubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6Uubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj[Uh]hatomic_long_t *v}(hj]UhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUUubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjtUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjpUhMhjqUubah}(h]h ]h"]h$]h&]uh1jhjUUubeh}(h]h ]h"]h$]h&]uh1jhjpUhMhjRUubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjUh]h long *old}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjRUubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjUh]hlong new}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjUubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjRUubeh}(h]h ]h"]h$]h&]uh1jhj6UubjM)}(h**Description**h]j)}(hjVh]h Description}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6UubjM)}(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 (}(hjVhhhNhNubj)}(h**v**h]hv}(hj&VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh == }(hjVhhhNhNubj)}(h**old**h]hold}(hj8VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh), atomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hjJVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to }(hjVhhhNhNubj)}(h**new**h]hnew}(hj\VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh# with acquire ordering. Otherwise, }(hjVhhhNhNubj)}(h**v**h]hv}(hjnVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh is not modified, }(hjVhhhNhNubj)}(h**old**h]hold}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh$ is updated to the current value of }(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh#, and relaxed ordering is provided.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6UubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6UubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6UubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh if the exchange occurred, }(hjVhhhNhNubj)}(h **false**h]hfalse}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh otherwise.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6Uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h0raw_atomic_long_try_cmpxchg_release (C function)%c.raw_atomic_long_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(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}(hj!WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj/WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhj.WhMubh)}(h#raw_atomic_long_try_cmpxchg_releaseh]j)}(h#raw_atomic_long_try_cmpxchg_releaseh]h#raw_atomic_long_try_cmpxchg_release}(hjAWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Wubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhj.WhMubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj`WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Wubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbWmodnameN classnameNjwjz)}j}]j)}jsjCWsb%c.raw_atomic_long_try_cmpxchg_releaseasbuh1hhjYWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYWubj)}(hjh]hv}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUWubj:)}(h long *oldh](j)}(hlongh]hlong}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(holdh]hold}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUWubj:)}(hlong newh](j)}(hlongh]hlong}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hnewh]hnew}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUWubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhj.WhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhj.WhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.WhMhjWhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj;XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8Xhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhj.WhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSXjHjSXjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj]Xh]h Parameters}(hj_XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Xubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj|Xh]hatomic_long_t *v}(hj~XhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjvXubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjvXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjsXubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjXh]h long *old}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjsXubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjXh]hlong new}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjsXubeh}(h]h ]h"]h$]h&]uh1jhjWXubjM)}(h**Description**h]j)}(hj)Yh]h Description}(hj+YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Yubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj?YhhhNhNubj)}(h**v**h]hv}(hjGYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh == }(hj?YhhhNhNubj)}(h**old**h]hold}(hjYYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh), atomically updates }(hj?YhhhNhNubj)}(h**v**h]hv}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh to }(hj?YhhhNhNubj)}(h**new**h]hnew}(hj}YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh# with release ordering. Otherwise, }(hj?YhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh is not modified, }(hj?YhhhNhNubj)}(h**old**h]hold}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh$ is updated to the current value of }(hj?YhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubh#, and relaxed ordering is provided.}(hj?YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubjM)}(h **Return**h]j)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh if the exchange occurred, }(hjYhhhNhNubj)}(h **false**h]hfalse}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh otherwise.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h0raw_atomic_long_try_cmpxchg_relaxed (C function)%c.raw_atomic_long_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjBZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Zhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjPZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ZhhhjOZhMubh)}(h#raw_atomic_long_try_cmpxchg_relaxedh]j)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h#raw_atomic_long_try_cmpxchg_relaxed}(hjbZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Zubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>ZhhhjOZhMubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjdZsb%c.raw_atomic_long_try_cmpxchg_relaxedasbuh1hhjzZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzZubj)}(hjh]hv}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvZubj:)}(h long *oldh](j)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(holdh]hold}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvZubj:)}(hlong newh](j)}(hlongh]hlong}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjQ)}(h h]h }(hj$[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hnewh]hnew}(hj2[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvZubeh}(h]h ]h"]h$]h&]jjuh1j3hj>ZhhhjOZhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj:ZhhhjOZhMubah}(h]j5Zah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOZhMhj7Zhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj\[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjY[hhubah}(h]h ]h"]h$]h&]uh1j3hj7ZhhhjOZhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjt[jHjt[jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj~[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|[ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjx[ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj[h]hatomic_long_t *v}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[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]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[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]jS)}(hj[h]h long *old}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[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]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj[ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj\h]hlong new}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj \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]jM)}(hlong value to assignh]hlong value to assign}(hj(\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$\hMhj%\ubah}(h]h ]h"]h$]h&]uh1jhj \ubeh}(h]h ]h"]h$]h&]uh1jhj$\hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhjx[ubjM)}(h**Description**h]j)}(hjJ\h]h Description}(hjL\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH\ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjx[ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj`\hhhNhNubj)}(h**v**h]hv}(hjh\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh == }(hj`\hhhNhNubj)}(h**old**h]hold}(hjz\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh), atomically updates }(hj`\hhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh to }(hj`\hhhNhNubj)}(h**new**h]hnew}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh# with relaxed ordering. Otherwise, }(hj`\hhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh is not modified, }(hj`\hhhNhNubj)}(h**old**h]hold}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh$ is updated to the current value of }(hj`\hhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`\ubh#, and relaxed ordering is provided.}(hj`\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjx[ubjM)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjx[ubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hahMhjx[ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh if the exchange occurred, }(hj]hhhNhNubj)}(h **false**h]hfalse}(hj*]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh otherwise.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjx[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_sub_and_test (C function)c.raw_atomic_long_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(hubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjchM>ubh)}(hraw_atomic_long_add_negativeh]j)}(hraw_atomic_long_add_negativeh]hraw_atomic_long_add_negative}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjchM>ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]hi}(hj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj%dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"dubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj'dmodnameN classnameNjwjz)}j}]j)}jsjcsbc.raw_atomic_long_add_negativeasbuh1hhjdubjQ)}(h h]h }(hjEdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjSdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hv}(hj`dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjchM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjchM>ubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchM>hjchhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhjchM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhjdubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjdh]hlong i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjdubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhM?hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhM?hjdubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjeh]hatomic_long_t *v}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjdubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM@hjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjehM@hjdubeh}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hj>eh]h Description}(hj@ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjhhMhubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjhhMhubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhMhhjhhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjgihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjdihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhhMhubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjiubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjih]hlong i}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihjiubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMihjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMihjiubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjih]hatomic_long_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjiubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMjhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMjhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjiubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj2jhhhNhNubj)}(h**v**h]hv}(hj:jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2jubh to (}(hj2jhhhNhNubj)}(h**v**h]hv}(hjLjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2jubh + }(hj2jhhhNhNubj)}(h**i**h]hi}(hj^jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2jubh) with release ordering.}(hj2jhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjiubjM)}(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.}(hjwjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMmhjiubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjiubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh if the resulting value of }(hjjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh is negative, }(hjjhhhNhNubj)}(h **false**h]hfalse}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh otherwise.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMphjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_add_negative_relaxed (C function)&c.raw_atomic_long_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}ubjQ)}(h h]h }(hj khhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhj khM}ubh)}(h$raw_atomic_long_add_negative_relaxedh]j)}(h$raw_atomic_long_add_negative_relaxedh]h$raw_atomic_long_add_negative_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhj khM}ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj;khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7kubjQ)}(h h]h }(hjIkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7kubj)}(hjh]hi}(hjWkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7kubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3kubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjrkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjokubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtkmodnameN classnameNjwjz)}j}]j)}jsj!ksb&c.raw_atomic_long_add_negative_relaxedasbuh1hhjkkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkkubj)}(hjh]hv}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3kubeh}(h]h ]h"]h$]h&]jjuh1j3hjjhhhj khM}ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhj khM}ubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj khM}hjjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjkhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhj khM}ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjlh]hlong i}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjlubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj0lhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,lhM~hj-lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj,lhM~hjlubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjPlh]hatomic_long_t *v}(hjRlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJlubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjilhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjelhMhjflubah}(h]h ]h"]h$]h&]uh1jhjJlubeh}(h]h ]h"]h$]h&]uh1jhjelhMhjlubeh}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h**Description**h]j)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjlhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh to (}(hjlhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh + }(hjlhhhNhNubj)}(h**i**h]hi}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh) with relaxed ordering.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubjM)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubh if the resulting value of }(hj mhhhNhNubj)}(h**v**h]hv}(hj#mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubh is negative, }(hj mhhhNhNubj)}(h **false**h]hfalse}(hj5mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubh otherwise.}(hj mhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic_long_fetch_add_unless (C function)"c.raw_atomic_long_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hjnmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjmhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj}mhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjmhhhj|mhMubh)}(h raw_atomic_long_fetch_add_unlessh]j)}(h raw_atomic_long_fetch_add_unlessh]h raw_atomic_long_fetch_add_unless}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjmhhhj|mhMubj4)}(h"(atomic_long_t *v, long a, long u)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsjmsb"c.raw_atomic_long_fetch_add_unlessasbuh1hhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubj:)}(hlong ah](j)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjםh]ha}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubj:)}(hlong uh](j)}(hlongh]hlong}(hj5nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nubjQ)}(h h]h }(hjCnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1nubj)}(hjlh]hu}(hjQnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubeh}(h]h ]h"]h$]h&]jjuh1j3hjjmhhhj|mhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjfmhhhj|mhMubah}(h]jamah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|mhMhjcmhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjznhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwnhhubah}(h]h ]h"]h$]h&]uh1j3hjcmhhhj|mhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjnjHjnjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjnh]hatomic_long_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjnubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hjnh]hlong a}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj ohMhj oubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj ohMhjnubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hj-oh]hlong u}(hj/ohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+oubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'oubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjFohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBohMhjCoubah}(h]h ]h"]h$]h&]uh1jhj'oubeh}(h]h ]h"]h$]h&]uh1jhjBohMhjnubeh}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjhoh]h Description}(hjjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfoubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj~ohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh != }(hj~ohhhNhNubj)}(h**u**h]hu}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh), atomically updates }(hj~ohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh to (}(hj~ohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh + }(hj~ohhhNhNubj)}(h**a**h]ha}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh!) with full ordering. Otherwise, }(hj~ohhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~oubh2 is not modified and relaxed ordering is provided.}(hj~ohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubjM)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubjM)}(h **Return**h]j)}(hj ph]hReturn}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubjM)}(hThe original value of **v**.h](hThe original value of }(hj phhhNhNubj)}(h**v**h]hv}(hj(phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj pubh.}(hj phhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_add_unless (C function)c.raw_atomic_long_add_unlesshNtauh1hhjhhhNhNubh)}(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}(hjaphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]phhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjophhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]phhhjnphMubh)}(hraw_atomic_long_add_unlessh]j)}(hraw_atomic_long_add_unlessh]hraw_atomic_long_add_unless}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}pubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]phhhjnphMubj4)}(h"(atomic_long_t *v, long a, long u)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjpsbc.raw_atomic_long_add_unlessasbuh1hhjpubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]hv}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubj:)}(hlong ah](j)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjםh]ha}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubj:)}(hlong uh](j)}(hlongh]hlong}(hj'qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#qubjQ)}(h h]h }(hj5qhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#qubj)}(hjlh]hu}(hjCqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubeh}(h]h ]h"]h$]h&]jjuh1j3hj]phhhjnphMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYphhhjnphMubah}(h]jTpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnphMhjVphhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjlqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiqhhubah}(h]h ]h"]h$]h&]uh1j3hjVphhhjnphMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjqh]hatomic_long_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hjqh]hlong a}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjrh]hlong u}(hj!rhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjrubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hj8rhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4rhMhj5rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj4rhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubjM)}(h**Description**h]j)}(hjZrh]h Description}(hj\rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXrubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjprhhhNhNubj)}(h**v**h]hv}(hjxrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh != }(hjprhhhNhNubj)}(h**u**h]hu}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh), atomically updates }(hjprhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh to (}(hjprhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh + }(hjprhhhNhNubj)}(h**a**h]ha}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh!) with full ordering. Otherwise, }(hjprhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjprubh2 is not modified and relaxed ordering is provided.}(hjprhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubjM)}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh if }(hjshhhNhNubj)}(h**v**h]hv}(hj(shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh was updated, }(hjshhhNhNubj)}(h **false**h]hfalse}(hj:shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh otherwise.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_inc_not_zero (C function)c.raw_atomic_long_inc_not_zerohNtauh1hhjhhhNhNubh)}(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}(hjsshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoshhhjshMubh)}(hraw_atomic_long_inc_not_zeroh]j)}(hraw_atomic_long_inc_not_zeroh]hraw_atomic_long_inc_not_zero}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhjoshhhjshMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjsmodnameN classnameNjwjz)}j}]j)}jsjssbc.raw_atomic_long_inc_not_zeroasbuh1hhjsubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]hv}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubah}(h]h ]h"]h$]h&]jjuh1j3hjoshhhjshMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkshhhjshMubah}(h]jfsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMhjhshhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjthhubah}(h]h ]h"]h$]h&]uh1j3hjhshhhjshMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.tjHj.tjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj8th]h Parameters}(hj:thhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6tubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2tubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjWth]hatomic_long_t *v}(hjYthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUtubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQtubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjpthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlthMhjmtubah}(h]h ]h"]h$]h&]uh1jhjQtubeh}(h]h ]h"]h$]h&]uh1jhjlthMhjNtubah}(h]h ]h"]h$]h&]uh1jhj2tubjM)}(h**Description**h]j)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2tubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh != 0), atomically updates }(hjthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh to (}(hjthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh% + 1) with full ordering. Otherwise, }(hjthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh2 is not modified and relaxed ordering is provided.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2tubjM)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2tubjM)}(h **Return**h]j)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2tubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj*uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&uubh if }(hj&uhhhNhNubj)}(h**v**h]hv}(hj= 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](jM)}(h**Parameters**h]j)}(hjLvh]h Parameters}(hjNvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJvubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjkvh]hatomic_long_t *v}(hjmvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjivubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjevubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjevubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjbvubah}(h]h ]h"]h$]h&]uh1jhjFvubjM)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh >= 0), atomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to (}(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh% + 1) with full ordering. Otherwise, }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh2 is not modified and relaxed ordering is provided.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubjM)}(hPSafe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubjM)}(h **Return**h]j)}(hj$wh]hReturn}(hj&whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"wubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj>whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:wubh if }(hj:whhhNhNubj)}(h**v**h]hv}(hjPwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:wubh was updated, }(hj:whhhNhNubj)}(h **false**h]hfalse}(hjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:wubh otherwise.}(hj:whhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjFvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h0raw_atomic_long_dec_unless_positive (C function)%c.raw_atomic_long_dec_unless_positivehNtauh1hhjhhhNhNubh)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjwhMubh)}(h#raw_atomic_long_dec_unless_positiveh]j)}(h#raw_atomic_long_dec_unless_positiveh]h#raw_atomic_long_dec_unless_positive}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjwhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjwsb%c.raw_atomic_long_dec_unless_positiveasbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjwhMubah}(h]jwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhjwhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hj>xhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;xhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVxjHjVxjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj`xh]h Parameters}(hjbxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^xubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjxh]hatomic_long_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}xubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyxubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjyxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjvxubah}(h]h ]h"]h$]h&]uh1jhjZxubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh <= 0), atomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh% - 1) with full ordering. Otherwise, }(hjxhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh2 is not modified and relaxed ordering is provided.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubjM)}(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.}(hj'yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubjM)}(h **Return**h]j)}(hj8yh]hReturn}(hj:yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6yubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjRyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh if }(hjNyhhhNhNubj)}(h**v**h]hv}(hjdyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh was updated, }(hjNyhhhNhNubj)}(h **false**h]hfalse}(hjvyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh otherwise.}(hjNyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_long_dec_if_positive (C function)!c.raw_atomic_long_dec_if_positivehNtauh1hhjhhhNhNubh)}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjyhMubh)}(hraw_atomic_long_dec_if_positiveh]j)}(hraw_atomic_long_dec_if_positiveh]hraw_atomic_long_dec_if_positive}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjyhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsjysb!c.raw_atomic_long_dec_if_positiveasbuh1hhjyubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]hv}(hj*zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjyhMubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhjyhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjSzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPzhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkzjHjkzjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjuzh]h Parameters}(hjwzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjszubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjzh]hatomic_long_t *v}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjzubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjozubjM)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh > 0), atomically updates }(hjzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh to (}(hjzhhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh% - 1) with full ordering. Otherwise, }(hjzhhhNhNubj)}(h**v**h]hv}(hj#{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh2 is not modified and relaxed ordering is provided.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubjM)}(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<{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubjM)}(h **Return**h]j)}(hjM{h]hReturn}(hjO{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK{ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjc{hhhNhNubj)}(h**v**h]hv}(hjk{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc{ubh - 1), regardless of whether }(hjc{hhhNhNubj)}(h**v**h]hv}(hj}{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc{ubh was updated.}(hjc{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjozubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]atomicsah ]h"]atomicsah$]h&]uh1hhhhhhhhK^ubh)}(hhh](h)}(hKernel objects manipulationh]hKernel objects manipulation}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hhhhhKjubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_get_path (C function)c.kobject_get_pathhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hDchar * kobject_get_path (const struct kobject *kobj, gfp_t gfp_mask)h]h)}(hBchar *kobject_get_path(const struct kobject *kobj, gfp_t gfp_mask)h](j)}(hcharh]hchar}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhj{hKubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hKubh)}(hkobject_get_pathh]j)}(hkobject_get_pathh]hkobject_get_path}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhj{hKubj4)}(h,(const struct kobject *kobj, gfp_t gfp_mask)h](j:)}(hconst struct kobject *kobjh](j?)}(hj h]hconst}(hj|hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj|ubjQ)}(h h]h }(hj&|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj?)}(hjBh]hstruct}(hj4|hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj|ubjQ)}(h h]h }(hjA|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubh)}(hhh]j)}(hkobjecth]hkobject}(hjR|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjT|modnameN classnameNjwjz)}j}]j)}jsj{sbc.kobject_get_pathasbuh1hhj|ubjQ)}(h h]h }(hjr|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hkobjh]hkobj}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hgfp_t gfp_maskh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]jn|c.kobject_get_pathasbuh1hhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hgfp_maskh]hgfp_mask}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hj{hhhj{hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhj{hKubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hKhj{hhubj4)}(hhh]jM)}(h2Allocate memory and fill in the path for **kobj**.h](h)Allocate memory and fill in the path for }(hj|hhhNhNubj)}(h**kobj**h]hkobj}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj|hhubah}(h]h ]h"]h$]h&]uh1j3hj{hhhj{hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)}jHj)}jIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj3}h]h Parameters}(hj5}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1}ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj-}ubj)}(hhh](j)}(hQ``const struct kobject *kobj`` kobject in question, with which to build the path h](j)}(h``const struct kobject *kobj``h]jS)}(hjR}h]hconst struct kobject *kobj}(hjT}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP}ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjL}ubj)}(hhh]jM)}(h1kobject in question, with which to build the pathh]h1kobject in question, with which to build the path}(hjk}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjg}hKhjh}ubah}(h]h ]h"]h$]h&]uh1jhjL}ubeh}(h]h ]h"]h$]h&]uh1jhjg}hKhjI}ubj)}(hA``gfp_t gfp_mask`` the allocation type used to allocate the path h](j)}(h``gfp_t gfp_mask``h]jS)}(hj}h]hgfp_t gfp_mask}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj}ubj)}(hhh]jM)}(h-the allocation type used to allocate the pathh]h-the allocation type used to allocate the path}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hKhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hKhjI}ubeh}(h]h ]h"]h$]h&]uh1jhj-}ubjM)}(h **Return**h]j)}(hj}h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj-}ubjM)}(h:The newly allocated memory, caller must free with kfree().h]h:The newly allocated memory, caller must free with kfree().}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj-}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_set_name (C function)c.kobject_set_namehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hAint kobject_set_name (struct kobject *kobj, const char *fmt, ...)h]h)}(h@int kobject_set_name(struct kobject *kobj, const char *fmt, ...)h](j)}(hinth]hint}(hj ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM,ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hM,ubh)}(hkobject_set_nameh]j)}(hkobject_set_nameh]hkobject_set_name}(hj,~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hM,ubj4)}(h,(struct kobject *kobj, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjH~hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjD~ubjQ)}(h h]h }(hjU~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD~ubh)}(hhh]j)}(hkobjecth]hkobject}(hjf~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjh~modnameN classnameNjwjz)}j}]j)}jsj.~sbc.kobject_set_nameasbuh1hhjD~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD~ubj)}(hkobjh]hkobj}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@~ubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hj~hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hcharh]hchar}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hfmth]hfmt}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@~ubj:)}(h...h]j)}(hj h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj@~ubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhj~hM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hM,ubah}(h]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hM,hj~hhubj4)}(hhh]jM)}(hSet the name of a kobject.h]hSet the name of a kobject.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM,hj=hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM0hj\ubj)}(hhh](j)}(h;``struct kobject *kobj`` struct kobject to set the name of h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM-hj{ubj)}(hhh]jM)}(h!struct kobject to set the name ofh]h!struct kobject to set the name of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjxubj)}(h9``const char *fmt`` format string used to build the name h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM.hjubj)}(hhh]jM)}(h$format string used to build the nameh]h$format string used to build the name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjxubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj\ubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM/hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_init (C function)c.kobject_inithNtauh1hhj{hhhNhNubh)}(hhh](h)}(hGvoid kobject_init (struct kobject *kobj, const struct kobj_type *ktype)h]h)}(hFvoid kobject_init(struct kobject *kobj, const struct kobj_type *ktype)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMBubh)}(h kobject_inith]j)}(h kobject_inith]h kobject_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhMBubj4)}(h5(struct kobject *kobj, const struct kobj_type *ktype)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj΀hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˀubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjЀmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_initasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst struct kobj_type *ktypeh](j?)}(hj h]hconst}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kobj_typeh]h kobj_type}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]jc.kobject_initasbuh1hhjubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hktypeh]hktype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhMBubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMBhjhhhubj4)}(hhh]jM)}(hInitialize a kobject structure.h]hInitialize a kobject structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjցjHjցjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjށubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMChjubj)}(hhh]jM)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMChjubah}(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]jS)}(hj8h]hconst struct kobj_type *ktype}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMDhj2ubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMDhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMDhjubeh}(h]h ]h"]h$]h&]uh1jhjځubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhjځubjM)}(hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.h]hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMEhjځubjM)}(hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.h]hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMHhjځubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_add (C function) c.kobject_addhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hTint kobject_add (struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h]h)}(hSint kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hjǂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÂhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzubjQ)}(h h]h }(hjւhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjÂhhhjՂhMzubh)}(h kobject_addh]j)}(h kobject_addh]h kobject_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjÂhhhjՂhMzubj4)}(hD(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_addasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j> c.kobject_addasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hparenth]hparent}(hj̓hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfmth]hfmt}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hj h]h...}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjÂhhhjՂhMzubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjՂhMzubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjՂhMzhjhhubj4)}(hhh]jM)}(hThe main kobject add function.h]hThe main kobject add function.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjՂhMzubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(hX**Parameters** ``struct kobject *kobj`` the kobject to add ``struct kobject *parent`` pointer to the parent of the kobject. ``const char *fmt`` format to name the kobject with. ``...`` variable arguments **Description** The kobject name is set and added to the kobject hierarchy in this function. If **parent** is set, then the parent of the **kobj** will be set to it. If **parent** is NULL, then the parent of the **kobj** will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree. Note, no "add" uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject's creation. If this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. **Return** If this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubj)}(hhh](j)}(h,``struct kobject *kobj`` the kobject to add h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM{hjubj)}(hhh]jM)}(hthe kobject to addh]hthe kobject to add}(hjƄhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj„hM{hjÄubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj„hM{hjubj)}(hA``struct kobject *parent`` pointer to the parent of the kobject. h](j)}(h``struct kobject *parent``h]jS)}(hjh]hstruct kobject *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM|hjubj)}(hhh]jM)}(h%pointer to the parent of the kobject.h]h%pointer to the parent of the kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(h5``const char *fmt`` format to name the kobject with. h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hjubj)}(hhh]jM)}(h format to name the kobject with.h]h format to name the kobject with.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hM}hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM}hjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjXh]h...}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjRubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubjM)}(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 }(hjhhhNhNubj)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is set, then the parent of the }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hj҅hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be set to it. If }(hjhhhNhNubj)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! is NULL, then the parent of the }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubji)}(hXIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. h](jM)}(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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ]h"]h$]h&]uh1jhhj0hMhjubjM)}(h **Return**h]j)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h]hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kobject_init_and_add (C function)c.kobject_init_and_addhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h|int kobject_init_and_add (struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h]h)}(h{int kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_init_and_addh]j)}(hkobject_init_and_addh]hkobject_init_and_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hc(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjʆhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjƆubjQ)}(h h]h }(hj׆hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƆubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_init_and_addasbuh1hhjƆubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƆubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƆubj)}(hkobjh]hkobj}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƆubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj†ubj:)}(hconst struct kobj_type *ktypeh](j?)}(hj h]hconst}(hj<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj8ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj?)}(hjBh]hstruct}(hjWhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj8ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubh)}(hhh]j)}(h kobj_typeh]h kobj_type}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]jc.kobject_init_and_addasbuh1hhj8ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hktypeh]hktype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj†ubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjLJhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjÇubjQ)}(h h]h }(hjԇhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjÇubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kobject_init_and_addasbuh1hhjÇubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjÇubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÇubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÇubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj†ubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hcharh]hchar}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hfmth]hfmt}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj†ubj:)}(h...h]j)}(hj h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj†ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hCInitialize a kobject structure and add it to the kobject hierarchy.h]hCInitialize a kobject structure and add it to the kobject hierarchy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjՈjHjՈjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj߈h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj݈ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjوubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]jS)}(hj7h]hconst struct kobj_type *ktype}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj1ubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(hB``struct kobject *parent`` pointer to the parent of this kobject. h](j)}(h``struct kobject *parent``h]jS)}(hjph]hstruct kobject *parent}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjjubj)}(hhh]jM)}(h&pointer to the parent of this kobject.h]h&pointer to the parent of this kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``const char *fmt`` the name of the kobject. h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hthe name of the kobject.h]hthe name of the kobject.}(hj‰hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj܉ubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj܉ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjوubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjوubjM)}(hDThis function combines the call to kobject_init() and kobject_add().h]hDThis function combines the call to kobject_init() and kobject_add().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjوubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjوubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_rename (C function)c.kobject_renamehNtauh1hhj{hhhNhNubh)}(hhh](h)}(h?int kobject_rename (struct kobject *kobj, const char *new_name)h]h)}(h>int kobject_rename(struct kobject *kobj, const char *new_name)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjhMubh)}(hkobject_renameh]j)}(hkobject_renameh]hkobject_rename}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmhhhjhMubj4)}(h,(struct kobject *kobj, const char *new_name)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj̊hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɊubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjΊmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_renameasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *new_nameh](j?)}(hj h]hconst}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnew_nameh]hnew_name}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjmhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjhMubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjfhhubj4)}(hhh]jM)}(hChange the name of an object.h]hChange the name of an object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjϋh]hstruct kobject *kobj}(hjыhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj͋ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjɋubj)}(hhh]jM)}(hobject in question.h]hobject in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɋubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƋubj)}(h+``const char *new_name`` object's new name h](j)}(h``const char *new_name``h]jS)}(hjh]hconst char *new_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject's new nameh]hobject’s new name}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƋubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_move (C function)c.kobject_movehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hCint kobject_move (struct kobject *kobj, struct kobject *new_parent)h]h)}(hBint kobject_move(struct kobject *kobj, struct kobject *new_parent)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kobject_moveh]j)}(h kobject_moveh]h kobject_move}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h2(struct kobject *kobj, struct kobject *new_parent)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjŌhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjҌhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_moveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *new_parenth](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubh)}(hhh]j)}(hkobjecth]hkobject}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]jc.kobject_moveasbuh1hhj3ubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h new_parenth]h new_parent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj}hhubj4)}(hhh]jM)}(hMove object to another parent.h]hMove object to another parent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjЍjHjЍjIjJjKuh1hhhhj{hNhNubj)}(h**Parameters** ``struct kobject *kobj`` object in question. ``struct kobject *new_parent`` object's new parent (can be NULL)h](jM)}(h**Parameters**h]j)}(hjڍh]h Parameters}(hj܍hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؍ubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject in question.h]hobject in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``struct kobject *new_parent`` object's new parent (can be NULL)h](j)}(h``struct kobject *new_parent``h]jS)}(hj2h]hstruct kobject *new_parent}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj,ubj)}(hhh]jM)}(h!object's new parent (can be NULL)h]h#object’s new parent (can be NULL)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhjԍubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_del (C function) c.kobject_delhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h'void kobject_del (struct kobject *kobj)h]h)}(h&void kobject_del(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMeubh)}(h kobject_delh]j)}(h kobject_delh]h kobject_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMeubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjɎhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjŎubjQ)}(h h]h }(hj֎hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjŎubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_delasbuh1hhjŎubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjŎubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŎubj)}(hkobjh]hkobj}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŎubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMeubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMeubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMehjhhubj4)}(hhh]jM)}(hUnlink kobject from hierarchy.h]hUnlink kobject from hierarchy.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMehjIhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMeubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMihjhubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMfhjubj)}(hhh]jM)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h**Description**h]j)}(hjȏh]h Description}(hjʏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƏubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhhjhubjM)}(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().}(hjޏhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMghjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_get (C function) c.kobject_gethNtauh1hhj{hhhNhNubh)}(hhh](h)}(h3struct kobject * kobject_get (struct kobject *kobj)h]h)}(h1struct kobject *kobject_get(struct kobject *kobj)h](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMyubh)}(hhh]j)}(hkobjecth]hkobject}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j)}js kobject_getsb c.kobject_getasbuh1hhj hhhjhMyubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMyubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMyubh)}(h kobject_geth]j)}(hjJh]h kobject_get}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMyubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jH c.kobject_getasbuh1hhjubjQ)}(h h]h }(hjÐhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjѐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjސhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhMyubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMyubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMyhjhhubj4)}(hhh]jM)}(hIncrement refcount for object.h]hIncrement refcount for object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhj{hNhNubj)}(h2**Parameters** ``struct kobject *kobj`` object.h](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjIh]hstruct kobject *kobj}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjCubj)}(hhh]jM)}(hobject.h]hobject.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_put (C function) c.kobject_puthNtauh1hhj{hhhNhNubh)}(hhh](h)}(h'void kobject_put (struct kobject *kobj)h]h)}(h&void kobject_put(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kobject_puth]j)}(h kobject_puth]h kobject_put}(hjđhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjܑubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܑubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjƑsb c.kobject_putasbuh1hhjܑubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܑubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܑubj)}(hkobjh]hkobj}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܑubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjؑubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hDecrement refcount for object.h]hDecrement refcount for object.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj`hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhj{hNhNubj)}(h~**Parameters** ``struct kobject *kobj`` object. **Description** Decrement the refcount, and if 0, call kobject_cleanup().h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjߒh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݒubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(h9Decrement the refcount, and if 0, call kobject_cleanup().h]h9Decrement the refcount, and if 0, call kobject_cleanup().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kobject_create_and_add (C function)c.kobject_create_and_addhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hRstruct kobject * kobject_create_and_add (const char *name, struct kobject *parent)h]h)}(hPstruct kobject *kobject_create_and_add(const char *name, struct kobject *parent)h](j?)}(hjBh]hstruct}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj1hM ubh)}(hhh]j)}(hkobjecth]hkobject}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jskobject_create_and_addsbc.kobject_create_and_addasbuh1hhj hhhj1hM ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj1hM ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hM ubh)}(hkobject_create_and_addh]j)}(hjah]hkobject_create_and_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj1hM ubj4)}(h*(const char *name, struct kobject *parent)h](j:)}(hconst char *nameh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjǓhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjՓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j_c.kobject_create_and_addasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj1hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hM hjhhubj4)}(hhh]jM)}(h?Create a struct kobject dynamically and register it with sysfs.h]h?Create a struct kobject dynamically and register it with sysfs.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjyhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh]jM)}(hthe name for the kobjecth]hthe name for the kobject}(hj֔hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjҔhM hjӔubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҔhM hjubj)}(hG``struct kobject *parent`` the parent kobject of this kobject, if any. h](j)}(h``struct kobject *parent``h]jS)}(hjh]hstruct kobject *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh]jM)}(h+the parent kobject of this kobject, if any.h]h+the parent kobject of this kobject, if any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_register (C function)c.kset_registerhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h"int kset_register (struct kset *k)h]h)}(h!int kset_register(struct kset *k)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMSubh)}(h kset_registerh]j)}(h kset_registerh]h kset_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMSubj4)}(h(struct kset *k)h]j:)}(hstruct kset *kh](j?)}(hjBh]hstruct}(hj•hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjϕhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݕubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kset_registerasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMSubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhMSubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMShjzhhubj4)}(hhh]jM)}(hInitialize and add a kset.h]hInitialize and add a kset.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMShjAhhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhMSubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hstruct kset *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMThjubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**NOTE**h]j)}(hjh]hNOTE}(hj–hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhj`ubjM)}(hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.h]hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.}(hj֖hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_unregister (C function)c.kset_unregisterhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h%void kset_unregister (struct kset *k)h]h)}(h$void kset_unregister(struct kset *k)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMsubh)}(hkset_unregisterh]j)}(hkset_unregisterh]hkset_unregister}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMsubj4)}(h(struct kset *k)h]j:)}(hstruct kset *kh](j?)}(hjBh]hstruct}(hjBhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj>ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubh)}(hhh]j)}(hkseth]hkset}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]j)}jsj(sbc.kset_unregisterasbuh1hhj>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMsubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMshjhhubj4)}(hhh]jM)}(hRemove a kset.h]hRemove a kset.}(hjėhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMshjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjܗjHjܗjIjJjKuh1hhhhj{hNhNubj)}(h***Parameters** ``struct kset *k`` kset.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/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]jS)}(hjh]hstruct kset *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhjubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_find_obj (C function)c.kset_find_objhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hDstruct kobject * kset_find_obj (struct kset *kset, const char *name)h]h)}(hBstruct kobject *kset_find_obj(struct kset *kset, const char *name)h](j?)}(hjBh]hstruct}(hj_hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjlhMubh)}(hhh]j)}(hkobjecth]hkobject}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}js kset_find_objsbc.kset_find_objasbuh1hhj[hhhjlhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjlhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjlhMubh)}(h kset_find_objh]j)}(hjh]h kset_find_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjlhMubj4)}(h%(struct kset *kset, const char *name)h](j:)}(hstruct kset *kseth](j?)}(hjBh]hstruct}(hj٘hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj՘ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj՘ubh)}(hhh]j)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kset_find_objasbuh1hhj՘ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj՘ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՘ubj)}(hkseth]hkset}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՘ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjјubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjIhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjEubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hcharh]hchar}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjјubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjlhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjlhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlhMhjThhubj4)}(hhh]jM)}(hSearch for object in kset.h]hSearch for object in kset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjlhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjϙjHjϙjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjٙh]h Parameters}(hjۙhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjיubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjәubj)}(hhh](j)}(h-``struct kset *kset`` kset we're looking in. h](j)}(h``struct kset *kset``h]jS)}(hjh]hstruct kset *kset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hkset we're looking in.h]hkset we’re looking in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhjubah}(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]jS)}(hj1h]hconst char *name}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj+ubj)}(hhh]jM)}(hobject's name.h]hobject’s name.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjәubjM)}(h**Description**h]j)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjәubjM)}(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 }(hjhhhNhNubj)}(h**kset->subsys**h]h kset->subsys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and iterate over }(hjhhhNhNubj)}(h**kset->list**h]h kset->list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe, looking for a matching kobject. If matching object is found take a reference and return the object.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjәubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kset_create_and_add (C function)c.kset_create_and_addhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h{struct kset * kset_create_and_add (const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h]h)}(hystruct kset *kset_create_and_add(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j?)}(hjBh]hstruct}(hj՚hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjњhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjњhhhjhMubh)}(hhh]j)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jskset_create_and_addsbc.kset_create_and_addasbuh1hhjњhhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjњhhhjhMubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjњhhhjhMubh)}(hkset_create_and_addh]j)}(hjh]hkset_create_and_add}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjњhhhjhMubj4)}(hY(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j:)}(hconst char *nameh](j?)}(hj h]hconst}(hjOhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjKubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hcharh]hchar}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubj:)}(h(const struct kset_uevent_ops *uevent_opsh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjǛhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjԛhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkset_uevent_opsh]hkset_uevent_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kset_create_and_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h uevent_opsh]h uevent_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubj:)}(hstruct kobject *parent_kobjh](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubh)}(hhh]j)}(hkobjecth]hkobject}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]jc.kset_create_and_addasbuh1hhj3ubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h parent_kobjh]h parent_kobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubeh}(h]h ]h"]h$]h&]jjuh1j3hjњhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj͚hhhjhMubah}(h]jȚah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjʚhhubj4)}(hhh]jM)}(h5Create a struct kset dynamically and add it to sysfs.h]h5Create a struct kset dynamically and add it to sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjʚhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjМjHjМjIjJjKuh1hhhhj{hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjڜh]h Parameters}(hjܜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؜ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjԜubj)}(hhh](j)}(h+``const char *name`` the name for the kset h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hthe name for the kseth]hthe name for the kset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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]jS)}(hj2h]h(const struct kset_uevent_ops *uevent_ops}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj,ubj)}(hhh]jM)}(h%a struct kset_uevent_ops for the kseth]h%a struct kset_uevent_ops for the kset}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(hI``struct kobject *parent_kobj`` the parent kobject of this kset, if any. h](j)}(h``struct kobject *parent_kobj``h]jS)}(hjkh]hstruct kobject *parent_kobj}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjeubj)}(hhh]jM)}(h(the parent kobject of this kset, if any.h]h(the parent kobject of this kset, if any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjԜubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjԜubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjԜubjM)}(h>If the kset was not able to be created, NULL will be returned.h]h>If the kset was not able to be created, NULL will be returned.}(hj˝hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjԜubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_uevent_env (C function)c.kobject_uevent_envhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h[int kobject_uevent_env (struct kobject *kobj, enum kobject_action action, char *envp_ext[])h]h)}(hZint kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *envp_ext[])h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_uevent_envh]j)}(hkobject_uevent_envh]hkobject_uevent_env}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hD(struct kobject *kobj, enum kobject_action action, char *envp_ext[])h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubh)}(hhh]j)}(hkobjecth]hkobject}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_uevent_envasbuh1hhj3ubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h f]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(henum kobject_action actionh](j?)}(hjh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobject_actionh]hkobject_action}(hjǞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĞubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjɞmodnameN classnameNjwjz)}j}]jqc.kobject_uevent_envasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(hchar *envp_ext[]h](j)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henvp_exth]henvp_ext}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]h[}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjyh]h]}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&send an uevent with environmental datah]h&send an uevent with environmental data}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(hXB**Parameters** ``struct kobject *kobj`` struct kobject that the action is happening to ``enum kobject_action action`` action that is happening ``char *envp_ext[]`` pointer to environmental data **Description** Returns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hjӟhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjϟhMhjПubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϟhMhjubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]jS)}(hjh]henum kobject_action action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``char *envp_ext[]`` pointer to environmental data h](j)}(h``char *envp_ext[]``h]jS)}(hj,h]hchar *envp_ext[]}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj&ubj)}(hhh]jM)}(hpointer to environmental datah]hpointer to environmental data}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubjM)}(heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h]heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_uevent (C function)c.kobject_ueventhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hEint kobject_uevent (struct kobject *kobj, enum kobject_action action)h]h)}(hDint kobject_uevent(struct kobject *kobj, enum kobject_action action)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_ueventh]j)}(hkobject_ueventh]hkobject_uevent}(hj͠hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɠubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h2(struct kobject *kobj, enum kobject_action action)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjϠsbc.kobject_ueventasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum kobject_action actionh](j?)}(hjh]henum}(hj[hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjWubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubh)}(hhh]j)}(hkobject_actionh]hkobject_action}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j#c.kobject_ueventasbuh1hhjWubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%notify userspace by sending an ueventh]h%notify userspace by sending an uevent}(hjϡhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj̡hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(hX**Parameters** ``struct kobject *kobj`` struct kobject that the action is happening to ``enum kobject_action action`` action that is happening **Description** Returns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj ubj)}(hhh]jM)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]jS)}(hjIh]henum kobject_action action}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjCubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubjM)}(haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.h]haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_uevent_var (C function)c.add_uevent_varhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hIint add_uevent_var (struct kobj_uevent_env *env, const char *format, ...)h]h)}(hHint add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)h](j)}(hinth]hint}(hjɢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŢhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjآhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjŢhhhjעhMubh)}(hadd_uevent_varh]j)}(hadd_uevent_varh]hadd_uevent_var}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjŢhhhjעhMubj4)}(h6(struct kobj_uevent_env *env, const char *format, ...)h](j:)}(hstruct kobj_uevent_env *envh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobj_uevent_envh]hkobj_uevent_env}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j)}jsjsbc.add_uevent_varasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henvh]henv}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *formath](j?)}(hj h]hconst}(hjxhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hformath]hformat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hj h]h...}(hjգhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѣubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjŢhhhjעhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjעhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjעhMhjhhubj4)}(hhh]jM)}(h.add key value string to the environment bufferh]h.add key value string to the environment buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjעhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(hX**Parameters** ``struct kobj_uevent_env *env`` environment buffer structure ``const char *format`` printf format for the key=value pair ``...`` variable arguments **Description** Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(h=``struct kobj_uevent_env *env`` environment buffer structure h](j)}(h``struct kobj_uevent_env *env``h]jS)}(hj?h]hstruct kobj_uevent_env *env}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj9ubj)}(hhh]jM)}(henvironment buffer structureh]henvironment buffer structure}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubj)}(h<``const char *format`` printf format for the key=value pair h](j)}(h``const char *format``h]jS)}(hjxh]hconst char *format}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjrubj)}(hhh]jM)}(h$printf format for the key=value pairh]h$printf format for the key=value pair}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjʤhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjƤhKhjǤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƤhKhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhjubjM)}(h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.h]h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubeh}(h]kernel-objects-manipulationah ]h"]kernel objects manipulationah$]h&]uh1hhhhhhhhKjubh)}(hhh](h)}(hKernel utility functionsh]hKernel utility functions}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKsubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hARRAY_SIZE (C macro) c.ARRAY_SIZEhNtauh1hhj hhhNhNubh)}(hhh](h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]j)}(hjDh]h ARRAY_SIZE}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjahKubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahKhj?hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj?hhhjahKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhj hNhNubjM)}(h``ARRAY_SIZE (arr)``h]jS)}(hjh]hARRAY_SIZE (arr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hj hhubji)}(h,get the number of elements in array **arr** h]jM)}(h+get the number of elements in array **arr**h](h$get the number of elements in array }(hjhhhNhNubj)}(h**arr**h]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhj hhubj)}(h+**Parameters** ``arr`` array to be sizedh](jM)}(h**Parameters**h]j)}(hjåh]h Parameters}(hjťhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hjubj)}(hhh]j)}(h``arr`` array to be sizedh](j)}(h``arr``h]jS)}(hjh]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjܥubj)}(hhh]jM)}(harray to be sizedh]harray to be sized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjܥubeh}(h]h ]h"]h$]h&]uh1jhjhKhj٥ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hARRAY_END (C macro) c.ARRAY_ENDhNtauh1hhj hhhNhNubh)}(hhh](h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]j)}(hj6h]h ARRAY_END}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhjShKubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShKhj1hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj1hhhjShKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhj hNhNubjM)}(h``ARRAY_END (arr)``h]jS)}(hjrh]hARRAY_END (arr)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhj hhubji)}(hlist, head) \' for_each_if(x->something == SOMETHING) The for_each_if() macro makes the use of for_each_foo_bar() less error prone.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j)}(h%``condition`` The condition to check h](j)}(h ``condition``h]jS)}(hj+h]h condition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hj%ubj)}(hhh]jM)}(hThe condition to checkh]hThe condition to check}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hK hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hK hj"ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(h Typical use::h]h Typical use:}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjubj)}(h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)h]h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.h]hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfind_closest (C macro)c.find_closesthNtauh1hhj hhhNhNubh)}(hhh](h)}(h find_closesth]h)}(h find_closesth]h)}(h find_closesth]j)}(hj÷h]h find_closest}(hjͷhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɷubah}(h]h ](jjeh"]h$]h&]jjuh1hhjŷhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``find_closest (x, a, as)``h]jS)}(hjh]hfind_closest (x, a, as)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj hhubji)}(h-locate the closest element in a sorted array h]jM)}(h,locate the closest element in a sorted arrayh]h,locate the closest element in a sorted array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj'hKhj hhubj)}(hX{**Parameters** ``x`` The reference value. ``a`` The array in which to look for the closest element. Must be sorted in ascending order. ``as`` Size of 'a'. **Description** Returns the index of the element closest to 'x'. **Note** If using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj.ubj)}(hhh](j)}(h``x`` The reference value. h](j)}(h``x``h]jS)}(hjSh]hx}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjMubj)}(hhh]jM)}(hThe reference value.h]hThe reference value.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjJubj)}(h]``a`` The array in which to look for the closest element. Must be sorted in ascending order. h](j)}(h``a``h]jS)}(hjh]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]jM)}(hVThe array in which to look for the closest element. Must be sorted in ascending order.h]hVThe array in which to look for the closest element. Must be sorted in ascending order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjJubj)}(h``as`` Size of 'a'. h](j)}(h``as``h]jS)}(hjƸh]has}(hjȸhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjĸubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]jM)}(h Size of 'a'.h]hSize of ‘a’.}(hj߸hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj۸hKhjܸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۸hKhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hj.ubjM)}(h0Returns the index of the element closest to 'x'.h]h4Returns the index of the element closest to ‘x’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj.ubjM)}(h**Note**h]j)}(hj(h]hNote}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hj.ubj)}(hhh]j)}(hIf using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](j)}(hBIf using an array of negative numbers (or mixed positive numbers),h]hBIf using an array of negative numbers (or mixed positive numbers),}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hjAubj)}(hhh]jM)}(h>then be sure that 'x' is of a signed-type to get good results.h]hBthen be sure that ‘x’ is of a signed-type to get good results.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK"hjTubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjShK!hj>ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!find_closest_descending (C macro)c.find_closest_descendinghNtauh1hhj hhhNhNubh)}(hhh](h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]j)}(hjh]hfind_closest_descending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK8ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK8ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK8hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK8ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjȹjHjȹjIjJjKuh1hhhhj hNhNubjM)}(h&``find_closest_descending (x, a, as)``h]jS)}(hjιh]h"find_closest_descending (x, a, as)}(hjйhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj̹ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK:hj hhubji)}(h-locate the closest element in a sorted array h]jM)}(h,locate the closest element in a sorted arrayh]h,locate the closest element in a sorted array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK8hjubah}(h]h ]h"]h$]h&]uh1jhhjhK8hj hhubj)}(hX**Parameters** ``x`` The reference value. ``a`` The array in which to look for the closest element. Must be sorted in descending order. ``as`` Size of 'a'. **Description** Similar to find_closest() but 'a' is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of '__fc_right' & '__fc_left' also works for unsigned numbers.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(hSimilar to find_closest() but 'a' is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of '__fc_right' & '__fc_left' also works for unsigned numbers.h]hSimilar to find_closest() but ‘a’ is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of ‘__fc_right’ & ‘__fc_left’ also works for unsigned numbers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hPTR_IF (C macro)c.PTR_IFhNtauh1hhj hhhNhNubh)}(hhh](h)}(hPTR_IFh]h)}(hPTR_IFh]h)}(hPTR_IFh]j)}(hjh]hPTR_IF}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj,hKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hKVhj hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj hhhj,hKVubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhj hNhNubjM)}(h``PTR_IF (cond, ptr)``h]jS)}(hjKh]hPTR_IF (cond, ptr)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKXhj hhubji)}(h?evaluate to **ptr** if **cond** is true, or to NULL otherwise. h]jM)}(h>evaluate to **ptr** if **cond** is true, or to NULL otherwise.h](h evaluate to }(hjehhhNhNubj)}(h**ptr**h]hptr}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh if }(hjehhhNhNubj)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh is true, or to NULL otherwise.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVhjaubah}(h]h ]h"]h$]h&]uh1jhhjhKVhj hhubj)}(hX]**Parameters** ``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) ``ptr`` A pointer to assign if **cond** is true. **Description** PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer. The macro can be very useful to help compiler dropping dead code. For instance, consider the following:: #ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif }; While this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set. An alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected. With the macro it is possible to write the following:: static int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), }; The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubj)}(hhh](j)}(hD``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) h](j)}(h``cond``h]jS)}(hjûh]hcond}(hjŻhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKWhjubj)}(hhh]jM)}(h:A conditional, usually in a form of IS_ENABLED(CONFIG_FOO)h]h:A conditional, usually in a form of IS_ENABLED(CONFIG_FOO)}(hjܻhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjػhKWhjٻubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjػhKWhjubj)}(h1``ptr`` A pointer to assign if **cond** is true. h](j)}(h``ptr``h]jS)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKXhjubj)}(hhh]jM)}(h(A pointer to assign if **cond** is true.h](hA pointer to assign if }(hjhhhNhNubj)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubjM)}(hPTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer.h](h1PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to }(hj_hhhNhNubj)}(h**ptr**h]hptr}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubhG if CONFIG_FOO is set to ‘y’ or ‘m’, or to NULL otherwise. The }(hj_hhhNhNubj)}(h**ptr**h]hptr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh argument must be a pointer.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKYhjubjM)}(hAThe macro can be very useful to help compiler dropping dead code.h]hAThe macro can be very useful to help compiler dropping dead code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK\hjubjM)}(h&For instance, consider the following::h]h%For instance, consider the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK^hjubj)}(h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };h]h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK`hjubjM)}(hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set.h]hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn’t have a way to know unless the configuration option is set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKmhjubjM)}(hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.h]hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.}(hjμhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKrhjubjM)}(h6With the macro it is possible to write the following::h]h5With the macro it is possible to write the following:}(hjݼhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKyhjubj)}(hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };h]hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK{hjubjM)}(h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h]h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hu64_to_user_ptr (C macro)c.u64_to_user_ptrhNtauh1hhj hhhNhNubh)}(hhh](h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]j)}(hj$h]hu64_to_user_ptr}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"hhhjAhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjAhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhj hNhNubjM)}(h``u64_to_user_ptr (x)``h]jS)}(hj`h]hu64_to_user_ptr (x)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj hhubji)}(h>cast a pointer passed as u64 from user space to void __user * h]jM)}(h=cast a pointer passed as u64 from user space to void __user *h]h=cast a pointer passed as u64 from user space to void __user *}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjvubah}(h]h ]h"]h$]h&]uh1jhhjhKhj hhubj)}(h**Parameters** ``x`` The u64 value from user space, usually via IOCTL **Description** u64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j)}(h7``x`` The u64 value from user space, usually via IOCTL h](j)}(h``x``h]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]jM)}(h0The u64 value from user space, usually via IOCTLh]h0The u64 value from user space, usually via IOCTL}(hjͽhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjɽhKhjʽubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɽhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h]hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_insidevar (C macro)c.is_insidevarhNtauh1hhj hhhNhNubh)}(hhh](h)}(h is_insidevarh]h)}(h is_insidevarh]h)}(h is_insidevarh]j)}(hj.h]h is_insidevar}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjKhKubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhKhj)hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj)hhhjKhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhj hNhNubjM)}(h``is_insidevar (ptr, var)``h]jS)}(hjjh]his_insidevar (ptr, var)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj hhubji)}(h=check if the **ptr** points inside the **var** memory range. h]jM)}(hthe variable which address and size identify the memory range.h]h>the variable which address and size identify the memory range.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjپubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(h^Evaluates to true if the address in **ptr** lies within the memory range allocated to **var**.h](h$Evaluates to true if the address in }(hjlhhhNhNubj)}(h**ptr**h]hptr}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh+ lies within the memory range allocated to }(hjlhhhNhNubj)}(h**var**h]hvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupper_32_bits (C macro)c.upper_32_bitshNtauh1hhj hhhNhNubh)}(hhh](h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]j)}(hjh]h upper_32_bits}(hjÿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjֿhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjֿhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjֿhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``upper_32_bits (n)``h]jS)}(hjh]hupper_32_bits (n)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj hhubji)}(hreturn bits 32-63 of a number h]jM)}(hreturn bits 32-63 of a numberh]hreturn bits 32-63 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhhjhKhj hhubj)}(h**Parameters** ``n`` the number we're accessing **Description** A basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj$ubj)}(hhh]j)}(h!``n`` the number we're accessing h](j)}(h``n``h]jS)}(hjIh]hn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjCubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj$ubjM)}(hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h]hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the “right shift count >= width of type” warning when that quantity is 32-bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlower_32_bits (C macro)c.lower_32_bitshNtauh1hhj hhhNhNubh)}(hhh](h)}(h lower_32_bitsh]h)}(h lower_32_bitsh]h)}(h lower_32_bitsh]j)}(hjh]h lower_32_bits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``lower_32_bits (n)``h]jS)}(hjh]hlower_32_bits (n)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj hhubji)}(hreturn bits 0-31 of a number h]jM)}(hreturn bits 0-31 of a numberh]hreturn bits 0-31 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj'hKhj hhubj)}(h2**Parameters** ``n`` the number we're accessingh](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj.ubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(hjSh]hn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjMubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupper_16_bits (C macro)c.upper_16_bitshNtauh1hhj hhhNhNubh)}(hhh](h)}(h upper_16_bitsh]h)}(h upper_16_bitsh]h)}(h upper_16_bitsh]j)}(hjh]h upper_16_bits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``upper_16_bits (n)``h]jS)}(hjh]hupper_16_bits (n)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj hhubji)}(hreturn bits 16-31 of a number h]jM)}(hreturn bits 16-31 of a numberh]hreturn bits 16-31 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj hKhj hhubj)}(h2**Parameters** ``n`` the number we're accessingh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(hj7h]hn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj1ubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlower_16_bits (C macro)c.lower_16_bitshNtauh1hhj hhhNhNubh)}(hhh](h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]j)}(hjh]h lower_16_bits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``lower_16_bits (n)``h]jS)}(hjh]hlower_16_bits (n)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj hhubji)}(hreturn bits 0-15 of a number h]jM)}(hreturn bits 0-15 of a numberh]hreturn bits 0-15 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhj hhubj)}(h2**Parameters** ``n`` the number we're accessingh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK!hjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(hjh]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#hjubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hREPEAT_BYTE (C macro) c.REPEAT_BYTEhNtauh1hhj hhhNhNubh)}(hhh](h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]j)}(hjoh]h REPEAT_BYTE}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjmhhhjhK#ubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK#hjjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjjhhhjhK#ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``REPEAT_BYTE (x)``h]jS)}(hjh]hREPEAT_BYTE (x)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK%hj hhubji)}(h@repeat the value **x** multiple times as an unsigned long value h]jM)}(h?repeat the value **x** multiple times as an unsigned long valueh](hrepeat the value }(hjhhhNhNubj)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) multiple times as an unsigned long value}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#hjubah}(h]h ]h"]h$]h&]uh1jhhjhK#hj hhubj)}(hv**Parameters** ``x`` value to repeat **NOTE** **x** is not checked for > 0xff; larger values produce odd results.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK'hjubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK$hj ubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hK$hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hK$hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**NOTE**h]j)}(hjLh]hNOTE}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hjubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh> is not checked for > 0xff; larger values produce odd results.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hREPEAT_BYTE_U32 (C macro)c.REPEAT_BYTE_U32hNtauh1hhj hhhNhNubh)}(hhh](h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]j)}(hjh]hREPEAT_BYTE_U32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK+ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK+ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK+hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK+ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubjM)}(h``REPEAT_BYTE_U32 (x)``h]jS)}(hjh]hREPEAT_BYTE_U32 (x)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK-hj hhubji)}(h5repeat the value **x** multiple times as a u32 value h]jM)}(h4repeat the value **x** multiple times as a u32 valueh](hrepeat the value }(hjhhhNhNubj)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh multiple times as a u32 value}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK+hjubah}(h]h ]h"]h$]h&]uh1jhhjhK+hj hhubj)}(hv**Parameters** ``x`` value to repeat **NOTE** **x** is not checked for > 0xff; larger values produce odd results.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK/hjubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]jS)}(hj;h]hx}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK,hj5ubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhK,hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhK,hj2ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**NOTE**h]j)}(hjvh]hNOTE}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hjubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> is not checked for > 0xff; larger values produce odd results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hconsole_list_lockh]j)}(hconsole_list_lockh]hconsole_list_lock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hLock the console listh]hLock the console list}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj-hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhj hNhNubj)}(hd**Parameters** ``void`` no arguments **Description** For console list or console->flags updatesh](jM)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjLubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjqh]hvoid}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjkubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjLubjM)}(h*For console list or console->flags updatesh]h*For console list or console->flags updates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hconsole_list_unlockh]j)}(hconsole_list_unlockh]hconsole_list_unlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hUnlock the console listh]hUnlock the console list}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjUhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhj hNhNubj)}(h\**Parameters** ``void`` no arguments **Description** Counterpart to console_list_lock()h](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjtubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjtubjM)}(h"Counterpart to console_list_lock()h]h"Counterpart to console_list_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hMubh)}(hconsole_srcu_read_lockh]j)}(hconsole_srcu_read_lockh]hconsole_srcu_read_lock}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj'hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj'hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hMhjhhubj4)}(hhh]jM)}(h9Register a new reader for the SRCU-protected console listh]h9Register a new reader for the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj}hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(h7Use for_each_console_srcu() to iterate the console listh]h7Use for_each_console_srcu() to iterate the console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hj#h]hContext}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h Any context.h]h Any context.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/A cookie to pass to console_srcu_read_unlock().h]h/A cookie to pass to console_srcu_read_unlock().}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM(ubh)}(hconsole_srcu_read_unlockh]j)}(hconsole_srcu_read_unlockh]hconsole_srcu_read_unlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM(ubj4)}(h (int cookie)h]j:)}(h int cookieh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM(ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhubj4)}(hhh]jM)}(h=Unregister an old reader from the SRCU-protected console listh]h=Unregister an old reader from the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhj hNhNubj)}(h**Parameters** ``int cookie`` cookie returned from console_srcu_read_lock() **Description** Counterpart to console_srcu_read_lock()h](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hj.ubj)}(hhh]j)}(h=``int cookie`` cookie returned from console_srcu_read_lock() h](j)}(h``int cookie``h]jS)}(hjSh]h int cookie}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM*hjMubj)}(hhh]jM)}(h-cookie returned from console_srcu_read_lock()h]h-cookie returned from console_srcu_read_lock()}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhM*hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM*hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hj.ubjM)}(h'Counterpart to console_srcu_read_lock()h]h'Counterpart to console_srcu_read_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM+hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h7match_devname_and_update_preferred_console (C function),c.match_devname_and_update_preferred_consolehNtauh1hhj hhhNhNubh)}(hhh](h)}(hgint match_devname_and_update_preferred_console (const char *devname, const char *name, const short idx)h]h)}(hfint match_devname_and_update_preferred_console(const char *devname, const char *name, const short idx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(h*match_devname_and_update_preferred_consoleh]j)}(h*match_devname_and_update_preferred_consoleh]h*match_devname_and_update_preferred_console}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h8(const char *devname, const char *name, const short idx)h](j:)}(hconst char *devnameh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hcharh]hchar}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevnameh]hdevname}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjmhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjiubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst short idxh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hshorth]hshort}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hidxh]hidx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h:Update a preferred console when matching devname is found.h]h:Update a preferred console when matching devname is found.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hj(hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhj hNhNubj)}(hX**Parameters** ``const char *devname`` DEVNAME:0.0 style device name ``const char *name`` Name of the corresponding console driver, e.g. "ttyS" ``const short idx`` Console index, e.g. port number. **Description** The function checks whether a device with the given **devname** is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device. It might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with. **Return** 0 on success, negative error code on failure.h](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubj)}(hhh](j)}(h6``const char *devname`` DEVNAME:0.0 style device name h](j)}(h``const char *devname``h]jS)}(hjlh]hconst char *devname}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjfubj)}(hhh]jM)}(hDEVNAME:0.0 style device nameh]hDEVNAME:0.0 style device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(hK``const char *name`` Name of the corresponding console driver, e.g. "ttyS" h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]jM)}(h5Name of the corresponding console driver, e.g. "ttyS"h]h9Name of the corresponding console driver, e.g. “ttyS”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(h5``const short idx`` Console index, e.g. port number. h](j)}(h``const short idx``h]jS)}(hjh]hconst short idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]jM)}(h Console index, e.g. port number.h]h Console index, e.g. port number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubjM)}(hX The function checks whether a device with the given **devname** is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.h](h4The function checks whether a device with the given }(hj/hhhNhNubj)}(h **devname**h]hdevname}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubjM)}(hIt might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with.h]hIt might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubjM)}(h **Return**h]j)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubjM)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_lock (C function)c.console_lockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_lock (void)h]h)}(hvoid console_lock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMA ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMA ubh)}(h console_lockh]j)}(h console_lockh]h console_lock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMA ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMA ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMA ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMA hjhhubj4)}(hhh]jM)}(h)block the console subsystem from printingh]h)block the console subsystem from printing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMA hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMA ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj%jHj%jIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hj)ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjNh]hvoid}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjHubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchKhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj)ubjM)}(h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.h]h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMB hj)ubjM)}(hCan sleep, returns nothing.h]hCan sleep, returns nothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_trylock (C function)c.console_trylockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hint console_trylock (void)h]h)}(hint console_trylock(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMW ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMW ubh)}(hconsole_trylockh]j)}(hconsole_trylockh]hconsole_trylock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMW ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMW ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMW ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMW hjhhubj4)}(hhh]jM)}(h0try to block the console subsystem from printingh]h0try to block the console subsystem from printing}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMW hjAhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMW ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hj`ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj`ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMX hj`ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_unlock (C function)c.console_unlockhNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid console_unlock (void)h]h)}(hvoid console_unlock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj"hMD ubh)}(hconsole_unlockh]j)}(hconsole_unlockh]hconsole_unlock}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj"hMD ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj"hMD ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj"hMD ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"hMD hj hhubj4)}(hhh]jM)}(h2unblock the legacy console subsystem from printingh]h2unblock the legacy console subsystem from printing}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD hjxhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj"hMD ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Releases the console_lock which the caller holds to block printing of the legacy console subsystem. While the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock. console_unlock(); may be called from any context.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.h]hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hjubjM)}(hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.h]hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hjubjM)}(h1console_unlock(); may be called from any context.h]h1console_unlock(); may be called from any context.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chML hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVhhhjhhMubh)}(hconsole_force_preferred_lockedh]j)}(hconsole_force_preferred_lockedh]hconsole_force_preferred_locked}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjVhhhjhhMubj4)}(h(struct console *con)h]j:)}(hstruct console *conh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hconsoleh]hconsole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj}sb c.console_force_preferred_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hconh]hcon}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjVhhhjhhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjhhMubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhMhjOhhubj4)}(hhh]jM)}(h$force a registered console preferredh]h$force a registered console preferred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjhhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhj hNhNubj)}(h**Parameters** ``struct console *con`` The registered console to force preferred. **Description** Must be called under console_list_lock().h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj6ubj)}(hhh]j)}(hC``struct console *con`` The registered console to force preferred. h](j)}(h``struct console *con``h]jS)}(hj[h]hstruct console *con}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjUubj)}(hhh]jM)}(h*The registered console to force preferred.h]h*The registered console to force preferred.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj6ubjM)}(h)Must be called under console_list_lock().h]h)Must be called under console_list_lock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hprintk_timed_ratelimith]j)}(hprintk_timed_ratelimith]hprintk_timed_ratelimit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h<(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j:)}(hunsigned long *caller_jiffiesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcaller_jiffiesh]hcaller_jiffies}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int interval_msecsh](j)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hinterval_msecsh]hinterval_msecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%caller-controlled printk ratelimitingh]h%caller-controlled printk ratelimiting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh](j)}(h<``unsigned long *caller_jiffies`` pointer to caller's state h](j)}(h!``unsigned long *caller_jiffies``h]jS)}(hjh]hunsigned long *caller_jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hpointer to caller's stateh]hpointer to caller’s state}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(h@``unsigned int interval_msecs`` minimum interval between prints h](j)}(h``unsigned int interval_msecs``h]jS)}(hjQh]hunsigned int interval_msecs}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjKubj)}(hhh]jM)}(hminimum interval between printsh]hminimum interval between prints}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(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 }(hjhhhNhNubj)}(h**interval_msecs**h]hinterval_msecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhV milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkmsg_dump_registerh]j)}(hkmsg_dump_registerh]hkmsg_dump_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kmsg_dumper *dumper)h]j:)}(hstruct kmsg_dumper *dumperh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kmsg_dumperh]h kmsg_dumper}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_registerasbuh1hhjubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdumperh]hdumper}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hregister a kernel log dumper.h]hregister a kernel log dumper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]jS)}(hjh]hstruct kmsg_dumper *dumper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(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 }(hj5hhhNhNubjS)}(h ``-EINVAL``h]h-EINVAL}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubh or }(hj5hhhNhNubjS)}(h ``-EBUSY``h]h-EBUSY}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubh otherwise.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkmsg_dump_unregisterh]j)}(hkmsg_dump_unregisterh]hkmsg_dump_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kmsg_dumper *dumper)h]j:)}(hstruct kmsg_dumper *dumperh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kmsg_dumperh]h kmsg_dumper}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_unregisterasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdumperh]hdumper}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj}hhubj4)}(hhh]jM)}(hunregister a kmsg dumper.h]hunregister a kmsg dumper.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjdubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]jS)}(hjh]hstruct kmsg_dumper *dumper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjdubjM)}(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 }(hjhhhNhNubjS)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj(hMubh)}(hkmsg_dump_get_lineh]j)}(hkmsg_dump_get_lineh]hkmsg_dump_get_line}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj(hMubj4)}(hP(struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h](j:)}(hstruct kmsg_dump_iter *iterh](j?)}(hjBh]hstruct}(hjWhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjSubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsj=sbc.kmsg_dump_get_lineasbuh1hhjSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h bool syslogh](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsyslogh]hsyslog}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h char *lineh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubCj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlineh]hline}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jc.kmsg_dump_get_lineasbuh1hhj;ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hsizeh]hsize}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h size_t *lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kmsg_dump_get_lineasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj(hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMhjhhubj4)}(hhh]jM)}(hretrieve one kmsg log lineh]hretrieve one kmsg log line}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hj.h]hstruct kmsg_dump_iter *iter}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj(ubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]jS)}(hjgh]h bool syslog}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjaubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj%ubj)}(h*``char *line`` buffer to copy the line to h](j)}(h``char *line``h]jS)}(hjh]h char *line}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj%ubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]jS)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj%ubj)}(h2``size_t *len`` length of line placed into buffer h](j)}(h``size_t *len``h]jS)}(hjh]h size_t *len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubjM)}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubjM)}(hIA return value of FALSE indicates that there are no more records to read.h]hIA return value of FALSE indicates that there are no more records to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMJubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMJubh)}(hkmsg_dump_get_bufferh]j)}(hkmsg_dump_get_bufferh]hkmsg_dump_get_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMJubj4)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_get_bufferasbuh1hhjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hiterh]hiter}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h bool syslogh](j)}(hjh]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hsyslogh]hsyslog}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h char *bufh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j&c.kmsg_dump_get_bufferasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsize_t *len_outh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]j&c.kmsg_dump_get_bufferasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlen_outh]hlen_out}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMJubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMJhjhhubj4)}(hhh]jM)}(hcopy kmsg log linesh]hcopy kmsg log lines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMJhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMJubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hjh]hstruct kmsg_dump_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMKhjubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]jS)}(hjh]h bool syslog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMLhjubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h)``char *buf`` buffer to copy the line to h](j)}(h ``char *buf``h]jS)}(hj5h]h char *buf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMMhj/ubj)}(hhh]jM)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMMhjubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]jS)}(hjnh]h size_t size}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjhubj)}(hhh]jM)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h6``size_t *len_out`` length of line placed into buffer h](j)}(h``size_t *len_out``h]jS)}(hjh]hsize_t *len_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMOhjubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMQhjubjM)}(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 }(hjhhhNhNubj3)}(h *youngest*h]hyoungest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubh| kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMPhjubjM)}(hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.h]hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMUhjubjM)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehMubh)}(hkmsg_dump_rewindh]j)}(hkmsg_dump_rewindh]hkmsg_dump_rewind}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjehMubj4)}(h(struct kmsg_dump_iter *iter)h]j:)}(hstruct kmsg_dump_iter *iterh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjzsbc.kmsg_dump_rewindasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjShhhjehMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjehMubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehMhjLhhubj4)}(hhh]jM)}(hreset the iteratorh]hreset the iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjehMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj3ubj)}(hhh]j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hjXh]hstruct kmsg_dump_iter *iter}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjRubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj3ubjM)}(hReset the dumper's iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.h]hReset the dumper’s iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h__printk_cpu_sync_waith]j)}(h__printk_cpu_sync_waith]h__printk_cpu_sync_wait}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj<hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhj hNhNubj)}(hB**Parameters** ``void`` no arguments **Context** Any context.h](jM)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj[ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjzubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj[ubjM)}(h Any context.h]h Any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h__printk_cpu_sync_try_geth]j)}(h__printk_cpu_sync_try_geth]h__printk_cpu_sync_try_get}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h6Try to acquire the printk cpu-reentrant spinning lock.h]h6Try to acquire the printk cpu-reentrant spinning lock.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(hXX**Parameters** ``void`` no arguments **Description** If no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately. **Context** Any context. Expects interrupts to be disabled. **Return** 1 on success, otherwise 0.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hj h]hContext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h1 on success, otherwise 0.h]h1 on success, otherwise 0.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjhMubh)}(h__printk_cpu_sync_puth]j)}(h__printk_cpu_sync_puth]h__printk_cpu_sync_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjhMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhjhMubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjkhhubj4)}(hhh]jM)}(h/Release the printk cpu-reentrant spinning lock.h]h/Release the printk cpu-reentrant spinning lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjkhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(h4The calling processor must be the owner of the lock.h]h4The calling processor must be the owner of the lock.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvpanic (C function)c.vpanichNtauh1hhj hhhNhNubh)}(hhh](h)}(h+void vpanic (const char *fmt, va_list args)h]h)}(h*void vpanic(const char *fmt, va_list args)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM;ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM;ubh)}(hvpanich]j)}(hvpanich]hvpanic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM;ubj4)}(h(const char *fmt, va_list args)h](j:)}(hconst char *fmth](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfmth]hfmt}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h va_list argsh](h)}(hhh]j)}(hva_listh]hva_list}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjsbc.vpanicasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM;ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM;hjhhubj4)}(hhh]jM)}(hhalt the systemh]hhalt the system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM;hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(h**Parameters** ``const char *fmt`` The text string to print ``va_list args`` Arguments for the format string **Description** Display a message, then perform cleanups. This function never returns.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM?hjubj)}(hhh](j)}(h-``const char *fmt`` The text string to print h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM<hjubj)}(hhh]jM)}(hThe text string to printh]hThe text string to print}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubj)}(h1``va_list args`` Arguments for the format string h](j)}(h``va_list args``h]jS)}(hj4h]h va_list args}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM=hj.ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM=hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM=hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM?hjubjM)}(hFDisplay a message, then perform cleanups. This function never returns.h]hFDisplay a message, then perform cleanups. This function never returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h add_tainth]j)}(h add_tainth]h add_taint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h+(unsigned flag, enum lockdep_ok lockdep_ok)h](j:)}(h unsigned flagh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hflagh]hflag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum lockdep_ok lockdep_okh](j?)}(hjh]henum}(hj&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(h lockdep_okh]h lockdep_ok}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsjsb c.add_taintasbuh1hhj"ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(h lockdep_okh]h lockdep_ok}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$add a taint flag if not already set.h]h$add a taint flag if not already set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj hNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh](j)}(h0``unsigned flag`` one of the TAINT_* constants. h](j)}(h``unsigned flag``h]jS)}(hjh]h unsigned flag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh]jM)}(hone of the TAINT_* constants.h]hone of the TAINT_* constants.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. h](j)}(h``enum lockdep_ok lockdep_ok``h]jS)}(hjh]henum lockdep_ok lockdep_ok}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh]jM)}(h#whether lock debugging is still OK.h]h#whether lock debugging is still OK.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubjM)}(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 }(hjghhhNhNubj)}(h**lockdebug_ok**h]h lockdebug_ok}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubhR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]kernel-utility-functionsah ]h"]kernel utility functionsah$]h&]uh1hhhhhhhhKsubh)}(hhh](h)}(hDevice Resource Managementh]hDevice Resource Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(h__devres_alloc_nodeh]j)}(h__devres_alloc_nodeh]h__devres_alloc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(hI(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.__devres_alloc_nodeasbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j*c.__devres_alloc_nodeasbuh1hhjQubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j*c.__devres_alloc_nodeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hAllocate device resource datah]hAllocate device resource data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(hI``dr_release_t release`` Release function devres will be associated with h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h/Release function devres will be associated withh]h/Release function devres will be associated with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]jS)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hAllocation sizeh]hAllocation size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]jS)}(hj;h]h gfp_t gfp}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj5ubj)}(hhh]jM)}(hAllocation flagsh]hAllocation flags}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjubj)}(h``int nid`` NUMA node h](j)}(h ``int nid``h]jS)}(hjth]hint nid}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjnubj)}(hhh]jM)}(h NUMA nodeh]h NUMA node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``const char *name`` Name of the resource h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hName of the resourceh]hName of the resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(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 }(hjhhhNhNubj)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh< bytes. The allocated area is zeroed, then associated with }(hjhhhNhNubj)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD. The returned pointer can be passed to other devres_*() functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h8Pointer to allocated devres on success, NULL on failure.h]h8Pointer to allocated devres on success, NULL on failure.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjhKubh)}(hdevres_for_each_resh]j)}(hdevres_for_each_resh]hdevres_for_each_res}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjhKubj4)}(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?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_for_each_resasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhj#ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hreleaseh]hrelease}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h(void (*fn)(struct device*, void*, void*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfnh]hfn}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjWhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *datah](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdatah]hdata}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjthhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhjhKubah}(h]jkah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjmhhubj4)}(hhh]jM)}(hResource iteratorh]hResource iterator}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjthhubah}(h]h ]h"]h$]h&]uh1j3hjmhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX9**Parameters** ``struct device *dev`` Device to iterate resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function ``void (*fn)(struct device *, void *, void *)`` Function to be called for each matched resource. ``void *data`` Data for **fn**, the 3rd parameter of **fn** **Description** Call **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1. **Return** voidh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(h7``struct device *dev`` Device to iterate resource from h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hDevice to iterate resource fromh]hDevice to iterate resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hj*h]hdr_match_t match}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj$ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjch]hvoid *match_data}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj]ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjubj)}(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]jS)}(hjh]h+void (*fn)(struct device *, void *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h0Function to be called for each matched resource.h]h0Function to be called for each matched resource.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h<``void *data`` Data for **fn**, the 3rd parameter of **fn** h](j)}(h``void *data``h]jS)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h,Data for **fn**, the 3rd parameter of **fn**h](h Data for }(hjhhhNhNubj)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, the 3rd parameter of }(hjhhhNhNubj)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(hnCall **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1.h](hCall }(hjFhhhNhNubj)}(h**fn**h]hfn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh for each devres of }(hjFhhhNhNubj)}(h**dev**h]hdev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh which is associated with }(hjFhhhNhNubj)}(h **release**h]hrelease}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh and for which }(hjFhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh returns 1.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_free (C function) c.devres_freehNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid devres_free (void *res)h]h)}(hvoid devres_free(void *res)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h devres_freeh]j)}(h devres_freeh]h devres_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h (void *res)h]j:)}(h void *resh](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hresh]hres}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hFree device resource datah]hFree device resource data}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjqhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hy**Parameters** ``void *res`` Pointer to devres data to free **Description** Free devres created with devres_alloc().h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j)}(h-``void *res`` Pointer to devres data to free h](j)}(h ``void *res``h]jS)}(hjh]h void *res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hPointer to devres data to freeh]hPointer to devres data to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h(Free devres created with devres_alloc().h]h(Free devres created with devres_alloc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhjChM ubh)}(h devres_addh]j)}(h devres_addh]h devres_add}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhjChM ubj4)}(h(struct device *dev, void *res)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjXsb c.devres_addasbuh1hhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubj:)}(h void *resh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hresh]hres}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubeh}(h]h ]h"]h$]h&]jjuh1j3hj1hhhjChM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-hhhjChM ubah}(h]j(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjChM hj*hhubj4)}(hhh]jM)}(hRegister device resourceh]hRegister device resource}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj4hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhjChM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjSubj)}(hhh](j)}(h1``struct device *dev`` Device to add resource to h](j)}(h``struct device *dev``h]jS)}(hjxh]hstruct device *dev}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjrubj)}(hhh]jM)}(hDevice to add resource toh]hDevice to add resource to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubj)}(h#``void *res`` Resource to register h](j)}(h ``void *res``h]jS)}(hjh]h void *res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hResource to registerh]hResource to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjSubjM)}(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 }(hjhhhNhNubj)}(h**res**h]hres}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h**res**h]hres}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2ubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjuhM2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhM2ubh)}(h devres_findh]j)}(h devres_findh]h devres_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjuhM2ubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.devres_findasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j c.devres_findasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j c.devres_findasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjuhM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjuhM2ubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhM2hj\hhubj4)}(hhh]jM)}(hFind device resourceh]hFind device resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2hjhhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjuhM2ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM6hj"ubj)}(hhh](j)}(h6``struct device *dev`` Device to lookup resource from h](j)}(h``struct device *dev``h]jS)}(hjGh]hstruct device *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjAubj)}(hhh]jM)}(hDevice to lookup resource fromh]hDevice to lookup resource from}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hM3hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM3hj>ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM4hjzubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj>ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM5hjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hj>ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM6hjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM8hj"ubjM)}(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 }(hjChhhNhNubj)}(h**dev**h]hdev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh which is associated with }(hjChhhNhNubj)}(h **release**h]hrelease}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh and for which }(hjChhhNhNubj)}(h **match**h]hmatch}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh returns 1. If }(hjChhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh) is NULL, it’s considered to match all.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM7hj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM;hj"ubjM)}(h+Pointer to found devres, NULL if not found.h]h+Pointer to found devres, NULL if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM<hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMNubh)}(h devres_geth]j)}(h devres_geth]h devres_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMNubj4)}(hG(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj+hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj'ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubh)}(hhh]j)}(hdeviceh]hdevice}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsjsb c.devres_getasbuh1hhj'ubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(h void *new_resh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnew_resh]hnew_res}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]je c.devres_getasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h match_datah]h match_data}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMNubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMNubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMNhjhhubj4)}(hhh]jM)}(h0Find devres, if non-existent, add one atomicallyh]h0Find devres, if non-existent, add one atomically}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNhjwhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhjubj)}(hhh](j)}(h:``struct device *dev`` Device to lookup or add devres for h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMOhjubj)}(hhh]jM)}(h"Device to lookup or add devres forh]h"Device to lookup or add devres for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(hH``void *new_res`` Pointer to new initialized devres to add if not found h](j)}(h``void *new_res``h]jS)}(hjh]h void *new_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjubj)}(hhh]jM)}(h5Pointer to new initialized devres to add if not foundh]h5Pointer to new initialized devres to add if not found}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMPhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMPhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hj-h]hdr_match_t match}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhj'ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMQhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMQhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjfh]hvoid *match_data}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhj`ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hMRhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThjubjM)}(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 }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( which has the same release function as }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and for which }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh return 1. If found, }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is freed; otherwise, }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is added atomically.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMShjubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMWhjubjM)}(h!Pointer to found or added devres.h]h!Pointer to found or added devres.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjuhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhMubh)}(h devres_removeh]j)}(h devres_removeh]h devres_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjuhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_removeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]jc.devres_removeasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]jc.devres_removeasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjuhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjuhMubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMhj\hhubj4)}(hhh]jM)}(h$Find a device resource and remove ith]h$Find a device resource and remove it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjuhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]jS)}(hjGh]hstruct device *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjAubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjzubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubjM)}(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 }(hjChhhNhNubj)}(h**dev**h]hdev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh associated with }(hjChhhNhNubj)}(h **release**h]hrelease}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh and for which }(hjChhhNhNubj)}(h **match**h]hmatch}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh returns 1. If }(hjChhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubhe is NULL, it’s considered to match all. If found, the resource is removed atomically and returned.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubjM)}(h8Pointer to removed devres on success, NULL if not found.h]h8Pointer to removed devres on success, NULL if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hdevres_destroyh]j)}(hdevres_destroyh]hdevres_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsjsbc.devres_destroyasbuh1hhjubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jXc.devres_destroyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jXc.devres_destroyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h match_datah]h match_data}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%Find a device resource and destroy ith]h%Find a device resource and destroy it}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjphhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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]jS)}(hj&h]hdr_match_t match}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;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]jS)}(hj_h]hvoid *match_data}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(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 }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh associated with }(hjhhhNhNubj)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and for which }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh returns 1. If }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhb is NULL, it’s considered to match all. If found, the resource is removed atomically and freed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjkhMubh)}(hdevres_releaseh]j)}(hdevres_releaseh]hdevres_release}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjkhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devres_releaseasbuh1hhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]jc.devres_releaseasbuh1hhjPubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjkhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjkhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjkhMhjRhhubj4)}(hhh]jM)}(h6Find a device resource and destroy it, calling releaseh]h6Find a device resource and destroy it, calling release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjkhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXN**Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed. **Return** 0 if devres is found and freed, -ENOENT if not found.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]jS)}(hj0h]hstruct device *dev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*ubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjih]hdr_release_t release}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjcubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubjM)}(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 }(hj,hhhNhNubj)}(h**dev**h]hdev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh associated with }(hj,hhhNhNubj)}(h **release**h]hrelease}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh and for which }(hj,hhhNhNubj)}(h **match**h]hmatch}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh returns 1. If }(hj,hhhNhNubj)}(h **match**h]hmatch}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh 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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubjM)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMLubh)}(hdevres_open_grouph]j)}(hdevres_open_grouph]hdevres_open_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMLubj4)}(h)(struct device *dev, void *id, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjsbc.devres_open_groupasbuh1hhjubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jNc.devres_open_groupasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMLubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMLubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMLhjhhubj4)}(hhh]jM)}(hOpen a new devres grouph]hOpen a new devres group}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMLubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhj=ubj)}(hhh](j)}(h7``struct device *dev`` Device to open devres group for h](j)}(h``struct device *dev``h]jS)}(hjbh]hstruct device *dev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMMhj\ubj)}(hhh]jM)}(hDevice to open devres group forh]hDevice to open devres group for}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhMMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMMhjYubj)}(h``void *id`` Separator ID h](j)}(h ``void *id``h]jS)}(hjh]hvoid *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNhjubj)}(hhh]jM)}(h Separator IDh]h Separator ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjYubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]jS)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMOhjubj)}(hhh]jM)}(hAllocation flagsh]hAllocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhj=ubjM)}(hOpen a new devres group for **dev** with **id**. For **id**, using a pointer to an object which won't be used for another group is recommended. If **id** is NULL, address-wise unique ID is created.h](hOpen a new devres group for }(hj% hhhNhNubj)}(h**dev**h]hdev}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh with }(hj% hhhNhNubj)}(h**id**h]hid}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh. For }(hj% hhhNhNubj)}(h**id**h]hid}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh[, using a pointer to an object which won’t be used for another group is recommended. If }(hj% hhhNhNubj)}(h**id**h]hid}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj% ubh, is NULL, address-wise unique ID is created.}(hj% hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhj=ubjM)}(h **Return**h]j)}(hj~ h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThj=ubjM)}(h%ID of the new group, NULL on failure.h]h%ID of the new group, NULL on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hdevres_close_grouph]j)}(hdevres_close_grouph]hdevres_close_group}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sbc.devres_close_groupasbuh1hhj ubjQ)}(h h]h }(hj> hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjn ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubj)}(hidh]hid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(hClose a devres grouph]hClose a devres group}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh](j)}(h8``struct device *dev`` Device to close devres group for h](j)}(h``struct device *dev``h]jS)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh]jM)}(h Device to close devres group forh]h Device to close devres group for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hj? h]hvoid *id}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj= ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9 ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjT hMhjU ubah}(h]h ]h"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]uh1jhjT hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjz h]h Description}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubjM)}(h\Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](hClose the group identified by }(hj hhhNhNubj)}(h**id**h]hid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. If }(hj hhhNhNubj)}(h**id**h]hid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, is NULL, the latest open group is selected.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hdevres_remove_grouph]j)}(hdevres_remove_grouph]hdevres_remove_group}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj- hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj> hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@ modnameN classnameNjwjz)}j}]j)}jsj sbc.devres_remove_groupasbuh1hhj ubjQ)}(h h]h }(hj^ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hidh]hid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(hRemove a devres grouph]hRemove a devres group}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh](j)}(h2``struct device *dev`` Device to remove group for h](j)}(h``struct device *dev``h]jS)}(hj& h]hstruct device *dev}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh]jM)}(hDevice to remove group forh]hDevice to remove group for}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj; hMhj< ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj; hMhj ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hj_ h]hvoid *id}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj] ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjY ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjt hMhju ubah}(h]h ]h"]h$]h&]uh1jhjY ubeh}(h]h ]h"]h$]h&]uh1jhjt hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubjM)}(hRemove the group identified by **id**. If **id** is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.h](hRemove the group identified by }(hj hhhNhNubj)}(h**id**h]hid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. If }(hj hhhNhNubj)}(h**id**h]hid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhn is NULL, the latest open group is selected. Note that removing a group doesn’t affect any other resources.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMubh)}(hdevres_release_grouph]j)}(hdevres_release_grouph]hdevres_release_group}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj<ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubh)}(hhh]j)}(hdeviceh]hdevice}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]j)}jsj&sbc.devres_release_groupasbuh1hhj<ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhjhMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj hhubj4)}(hhh]jM)}(h#Release resources in a devres grouph]h#Release resources in a devres group}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubj)}(hhh](j)}(h3``struct device *dev`` Device to release group for h](j)}(h``struct device *dev``h]jS)}(hjFh]hstruct device *dev}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj@ubj)}(hhh]jM)}(hDevice to release group forh]hDevice to release group for}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hjh]hvoid *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjyubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubjM)}(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 }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. If }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubjM)}(h+The number of released non-group resources.h]h+The number of released non-group resources.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjXhM ubh)}(h__devm_add_actionh]j)}(h__devm_add_actionh]h__devm_add_action}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjXhM ubj4)}(hI(struct device *dev, void (*action)(void*), void *data, const char *name)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjmsbc.__devm_add_actionasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hactionh]haction}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjXhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjXhM ubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhM hj?hhubj4)}(hhh]jM)}(h0add a custom action to list of managed resourcesh]h0add a custom action to list of managed resources}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj7hhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhjXhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRjHjRjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjVubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]jS)}(hj{h]hstruct device *dev}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjuubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h:``void (*action)(void *)`` Function that should be called h](j)}(h``void (*action)(void *)``h]jS)}(hjh]hvoid (*action)(void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hFunction that should be calledh]hFunction that should be called}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]jS)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hjhhhNhNubj)}(h **action**h]haction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh implementation}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(hC``const char *name`` Name of the resource (for debugging purposes) h](j)}(h``const char *name``h]jS)}(hj8h]hconst char *name}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubj)}(hhh]jM)}(h-Name of the resource (for debugging purposes)h]h-Name of the resource (for debugging purposes)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjVubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&devm_remove_action_nowarn (C function)c.devm_remove_action_nowarnhNtauh1hhjhhhNhNubh)}(hhh](h)}(hVint devm_remove_action_nowarn (struct device *dev, void (*action)(void *), void *data)h]h)}(hTint devm_remove_action_nowarn(struct device *dev, void (*action)(void*), void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMZubh)}(hdevm_remove_action_nowarnh]j)}(hdevm_remove_action_nowarnh]hdevm_remove_action_nowarn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMZubj4)}(h7(struct device *dev, void (*action)(void*), void *data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devm_remove_action_nowarnasbuh1hhjubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMZubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMZhjhhubj4)}(hhh]jM)}(h&removes previously added custom actionh]h&removes previously added custom action}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device that owns the action ``void (*action)(void *)`` Function implementing the action ``void *data`` Pointer to data passed to **action** implementation **Description** Removes instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries. In contrast to devm_remove_action(), this function does not WARN() if no entry could have been found. This should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction. Causing the warning from regular driver code most likely indicates an abuse of the devres API. **Return** 0 on success, -ENOENT if no entry could have been found.h](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM^hjgubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM[hjubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]jS)}(hjh]hvoid (*action)(void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM\hjubj)}(hhh]jM)}(h Function implementing the actionh]h Function implementing the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]jS)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM]hjubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hjhhhNhNubj)}(h **action**h]haction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh implementation}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM_hjgubjM)}(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 }(hjahhhNhNubj)}(h **action**h]haction}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM^hjgubjM)}(heIn contrast to devm_remove_action(), this function does not WARN() if no entry could have been found.h]heIn contrast to devm_remove_action(), this function does not WARN() if no entry could have been found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMahjgubjM)}(hThis should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction.h]hThis should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMdhjgubjM)}(h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.h]h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMghjgubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMjhjgubjM)}(h80 on success, -ENOENT if no entry could have been found.h]h80 on success, -ENOENT if no entry could have been found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMkhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM~ubh)}(hdevm_release_actionh]j)}(hdevm_release_actionh]hdevm_release_action}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM~ubj4)}(h7(struct device *dev, void (*action)(void*), void *data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj/ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubh)}(hhh]j)}(hdeviceh]hdevice}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjsbc.devm_release_actionasbuh1hhj/ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(h void *datah](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hdatah]hdata}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM~ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM~hjhhubj4)}(hhh]jM)}(h&release previously added custom actionh]h&release previously added custom action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM~hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]jS)}(hjh]hvoid (*action)(void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h Function implementing the actionh]h Function implementing the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]jS)}(hj<h]h void *data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj6ubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hjUhhhNhNubj)}(h **action**h]haction}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh implementation}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(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 }(hjhhhNhNubj)}(h **action**h]haction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhg previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h devm_kmalloch]j)}(h devm_kmalloch]h devm_kmalloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h,(struct device *dev, size_t size, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj*hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubh)}(hhh]j)}(hdeviceh]hdevice}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]j)}jsjsbc.devm_kmallocasbuh1hhj&ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jdc.devm_kmallocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jdc.devm_kmallocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hResource-managed kmalloch]hResource-managed kmalloc}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj~h]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjxubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]jS)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hAllocation sizeh]hAllocation size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubeh}(h]h ]h"]h$]h&]uh1jhjYubjM)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubjM)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h devm_krealloch]j)}(h devm_krealloch]h devm_krealloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h;(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devm_kreallocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *ptrh](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hptrh]hptr}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsize_t new_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devm_kreallocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnew_sizeh]hnew_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devm_kreallocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfph]hgfp}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hResource-managed krealloc()h]hResource-managed krealloc()}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj3hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to re-allocate memory for ``void *ptr`` Pointer to the memory chunk to re-allocate ``size_t new_size`` New allocation size ``gfp_t gfp`` Allocation gfp flags **Description** Managed krealloc(). Resizes the memory chunk allocated with devm_kmalloc(). Behaves similarly to regular krealloc(): if **ptr** is NULL or ZERO_SIZE_PTR, it's the equivalent of devm_kmalloc(). If new_size is zero, it frees the previously allocated memory and returns ZERO_SIZE_PTR. This function doesn't change the order in which the release callback for the re-alloc'ed devres will be called (except when falling back to devm_kmalloc() or when freeing resources when new_size is zero). The contents of the memory are preserved up to the lesser of new and old sizes.h](jM)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj)}(hhh](j)}(h8``struct device *dev`` Device to re-allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjwh]hstruct device *dev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjqubj)}(hhh]jM)}(h Device to re-allocate memory forh]h Device to re-allocate memory for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h9``void *ptr`` Pointer to the memory chunk to re-allocate h](j)}(h ``void *ptr``h]jS)}(hjh]h void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h*Pointer to the memory chunk to re-allocateh]h*Pointer to the memory chunk to re-allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h(``size_t new_size`` New allocation size h](j)}(h``size_t new_size``h]jS)}(hjh]hsize_t new_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hNew allocation sizeh]hNew allocation size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hj"h]h gfp_t gfp}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubjM)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubjM)}(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 }(hjshhhNhNubj)}(h**ptr**h]hptr}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubhX 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.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM,ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM,ubh)}(h devm_kstrduph]j)}(h devm_kstrduph]h devm_kstrdup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM,ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.devm_kstrdupasbuh1hhjubjQ)}(h h]h }(hj< hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h const char *sh](j?)}(hj h]hconst}(hjp hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjl ubjQ)}(h h]h }(hj} hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjl ubj)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjl ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl ubj)}(hsh]hs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j8 c.devm_kstrdupasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hgfph]hgfp}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM,ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM,hjhhubj4)}(hhh]jM)}(hFAllocate resource managed space and copy an existing string into that.h]hFAllocate resource managed space and copy an existing string into that.}(hj&!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,hj#!hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>!jHj>!jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjH!h]h Parameters}(hjJ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF!ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM0hjB!ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjg!h]hstruct device *dev}(hji!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM.hja!ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|!hM.hj}!ubah}(h]h ]h"]h$]h&]uh1jhja!ubeh}(h]h ]h"]h$]h&]uh1jhj|!hM.hj^!ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hj!h]h const char *s}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM/hj!ubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!hM/hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM/hj^!ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj!h]h gfp_t gfp}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM1hj!ubj)}(hhh]jM)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM0hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM1hj^!ubeh}(h]h ]h"]h$]h&]uh1jhjB!ubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjB!ubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj+"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2hjB!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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?)}(hj h]hconst}(hjZ"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjV"hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM?ubjQ)}(h h]h }(hjh"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV"hhhjg"hM?ubj)}(hcharh]hchar}(hjv"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV"hhhjg"hM?ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV"hhhjg"hM?ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV"hhhjg"hM?ubh)}(hdevm_kstrdup_consth]j)}(hdevm_kstrdup_consth]hdevm_kstrdup_const}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjV"hhhjg"hM?ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(hdeviceh]hdevice}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]j)}jsj"sbc.devm_kstrdup_constasbuh1hhj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hdevh]hdev}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(h const char *sh](j?)}(hj h]hconst}(hj1#hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj-#ubjQ)}(h h]h }(hj>#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-#ubj)}(hcharh]hchar}(hjL#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-#ubjQ)}(h h]h }(hjZ#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-#ubj)}(hjh]h*}(hjh#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-#ubj)}(hj h]hs}(hju#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j"c.devm_kstrdup_constasbuh1hhj#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hgfph]hgfp}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubeh}(h]h ]h"]h$]h&]jjuh1j3hjV"hhhjg"hM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjR"hhhjg"hM?ubah}(h]jM"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjg"hM?hjO"hhubj4)}(hhh]jM)}(h/resource managed conditional string duplicationh]h/resource managed conditional string duplication}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM?hj#hhubah}(h]h ]h"]h$]h&]uh1j3hjO"hhhjg"hM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#jHj#jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMChj$ubj)}(hhh](j)}(h@``struct device *dev`` device for which to duplicate the string h](j)}(h``struct device *dev``h]jS)}(hj'$h]hstruct device *dev}(hj)$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM@hj!$ubj)}(hhh]jM)}(h(device for which to duplicate the stringh]h(device for which to duplicate the string}(hj@$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<$hM@hj=$ubah}(h]h ]h"]h$]h&]uh1jhj!$ubeh}(h]h ]h"]h$]h&]uh1jhj<$hM@hj$ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hj`$h]h const char *s}(hjb$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMAhjZ$ubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hjy$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhju$hMAhjv$ubah}(h]h ]h"]h$]h&]uh1jhjZ$ubeh}(h]h ]h"]h$]h&]uh1jhju$hMAhj$ubj)}(hM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj$h]h gfp_t gfp}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMBhj$ubj)}(hhh]jM)}(h>the GFP mask used in the kmalloc() call when allocating memoryh]h>the GFP mask used in the kmalloc() call when allocating memory}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMBhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMBhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMDhj$ubjM)}(hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.h]hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMChj$ubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMFhj$ubjM)}(hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.h]hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMGhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hj@%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<%hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUubjQ)}(h h]h }(hjO%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<%hhhjN%hMUubj)}(hjh]h*}(hj]%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<%hhhjN%hMUubh)}(hdevm_kvasprintfh]j)}(hdevm_kvasprintfh]hdevm_kvasprintf}(hjn%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<%hhhjN%hMUubj4)}(h<(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubh)}(hhh]j)}(hdeviceh]hdevice}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsjp%sbc.devm_kvasprintfasbuh1hhj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hdevh]hdev}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j%c.devm_kvasprintfasbuh1hhj%ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hgfph]hgfp}(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hjD&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@&ubjQ)}(h h]h }(hjQ&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@&ubj)}(hcharh]hchar}(hj_&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@&ubjQ)}(h h]h }(hjm&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@&ubj)}(hjh]h*}(hj{&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@&ubj)}(hfmth]hfmt}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(h va_list aph](h)}(hhh]j)}(hva_listh]hva_list}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j%c.devm_kvasprintfasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(haph]hap}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hj<%hhhjN%hMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8%hhhjN%hMUubah}(h]j3%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjN%hMUhj5%hhubj4)}(hhh]jM)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhj&hhubah}(h]h ]h"]h$]h&]uh1j3hj5%hhhjN%hMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjhNhNubj)}(hXM**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory ``const char *fmt`` The printf()-style format string ``va_list ap`` Arguments for the format string **Return** Pointer to allocated string on success, NULL on failure.h](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMYhj'ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj;'h]hstruct device *dev}(hj='hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMWhj5'ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjT'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjP'hMWhjQ'ubah}(h]h ]h"]h$]h&]uh1jhj5'ubeh}(h]h ]h"]h$]h&]uh1jhjP'hMWhj2'ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hjt'h]h gfp_t gfp}(hjv'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMYhjn'ubj)}(hhh]jM)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMXhj'ubah}(h]h ]h"]h$]h&]uh1jhjn'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMYhj2'ubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]jS)}(hj'h]hconst char *fmt}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZhj'ubj)}(hhh]jM)}(h The printf()-style format stringh]h The printf()-style format string}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hMZhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMZhj2'ubj)}(h/``va_list ap`` Arguments for the format string h](j)}(h``va_list ap``h]jS)}(hj'h]h va_list ap}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM[hj'ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hM[hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM[hj2'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubjM)}(h **Return**h]j)}(hj"(h]hReturn}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM]hj'ubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj8(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM\hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hjg(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc(hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuubjQ)}(h h]h }(hjv(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjc(hhhju(hMuubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc(hhhju(hMuubh)}(hdevm_kasprintfh]j)}(hdevm_kasprintfh]hdevm_kasprintf}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjc(hhhju(hMuubj4)}(h5(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]j)}(hdeviceh]hdevice}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsj(sbc.devm_kasprintfasbuh1hhj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hdevh]hdev}(hj )hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj&)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj()modnameN classnameNjwjz)}j}]j(c.devm_kasprintfasbuh1hhj)ubjQ)}(h h]h }(hjD)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hgfph]hgfp}(hjR)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hjk)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjg)ubjQ)}(h h]h }(hjx)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg)ubj)}(hcharh]hchar}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hfmth]hfmt}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(h...h]j)}(hj h]h...}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjc(hhhju(hMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_(hhhju(hMuubah}(h]jZ(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhju(hMuhj\(hhubj4)}(hhh]jM)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuhj)hhubah}(h]h ]h"]h$]h&]uh1j3hj\(hhhju(hMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj *jHj *jIjJjKuh1hhhhjhNhNubj)}(hXF**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory ``const char *fmt`` The printf()-style format string ``...`` Arguments for the format string **Return** Pointer to allocated string on success, NULL on failure.h](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhj *ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj2*h]hstruct device *dev}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMwhj,*ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjG*hMwhjH*ubah}(h]h ]h"]h$]h&]uh1jhj,*ubeh}(h]h ]h"]h$]h&]uh1jhjG*hMwhj)*ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hjk*h]h gfp_t gfp}(hjm*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhje*ubj)}(hhh]jM)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMxhj*ubah}(h]h ]h"]h$]h&]uh1jhje*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMyhj)*ubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]jS)}(hj*h]hconst char *fmt}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMzhj*ubj)}(hhh]jM)}(h The printf()-style format stringh]h The printf()-style format string}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMzhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMzhj)*ubj)}(h(``...`` Arguments for the format string h](j)}(h``...``h]jS)}(hj*h]h...}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM{hj*ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*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 *ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM}hj *ubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj/+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM|hj *ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hj^+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ+hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjm+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ+hhhjl+hMubh)}(h devm_kfreeh]j)}(h devm_kfreeh]h devm_kfree}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZ+hhhjl+hMubj4)}(h#(struct device *dev, const void *p)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj+hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubh)}(hhh]j)}(hdeviceh]hdevice}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j)}jsj+sb c.devm_kfreeasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hdevh]hdev}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(h const void *ph](j?)}(hj h]hconst}(hj ,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ,ubj)}(hvoidh]hvoid}(hj(,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubjQ)}(h h]h }(hj6,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ,ubj)}(hjh]h*}(hjD,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubj)}(hjh]hp}(hjQ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hjZ+hhhjl+hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjV+hhhjl+hMubah}(h]jQ+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjl+hMhjS+hhubj4)}(hhh]jM)}(hResource-managed kfreeh]hResource-managed kfree}(hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjw,hhubah}(h]h ]h"]h$]h&]uh1j3hjS+hhhjl+hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` Device this memory belongs to ``const void *p`` Memory to free **Description** Free memory allocated with devm_kmalloc().h](jM)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hj,h]hstruct device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj,ubj)}(h!``const void *p`` Memory to free h](j)}(h``const void *p``h]jS)}(hj,h]h const void *p}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj -hMhj -ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj -hMhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hj/-h]h Description}(hj1-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj--ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubjM)}(h*Free memory allocated with devm_kmalloc().h]h*Free memory allocated with devm_kmalloc().}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_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}(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp-hhhj-hMubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-hhhj-hMubh)}(h devm_kmemduph]j)}(h devm_kmemduph]h devm_kmemdup}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjp-hhhj-hMubj4)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj-hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj-ubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubh)}(hhh]j)}(hdeviceh]hdevice}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsj-sbc.devm_kmemdupasbuh1hhj-ubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]h*}(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hdevh]hdev}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(hconst void *srch](j?)}(hj h]hconst}(hj0.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj,.ubjQ)}(h h]h }(hj=.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,.ubj)}(hvoidh]hvoid}(hjK.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,.ubjQ)}(h h]h }(hjY.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,.ubj)}(hjh]h*}(hjg.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,.ubj)}(hsrch]hsrc}(hjt.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j-c.devm_kmemdupasbuh1hhj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hlenh]hlen}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j-c.devm_kmemdupasbuh1hhj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hgfph]hgfp}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubeh}(h]h ]h"]h$]h&]jjuh1j3hjp-hhhj-hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjl-hhhj-hMubah}(h]jg-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMhji-hhubj4)}(hhh]jM)}(hResource-managed kmemduph]hResource-managed kmemdup}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj+/hhubah}(h]h ]h"]h$]h&]uh1j3hji-hhhj-hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjF/jHjF/jIjJjKuh1hhhhjhNhNubj)}(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](jM)}(h**Parameters**h]j)}(hjP/h]h Parameters}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN/ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJ/ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjo/h]hstruct device *dev}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm/ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhji/ubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhji/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjf/ubj)}(h/``const void *src`` Memory region to duplicate h](j)}(h``const void *src``h]jS)}(hj/h]hconst void *src}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj/ubj)}(hhh]jM)}(hMemory region to duplicateh]hMemory region to duplicate}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjf/ubj)}(h$``size_t len`` Memory region length h](j)}(h``size_t len``h]jS)}(hj/h]h size_t len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj/ubj)}(hhh]jM)}(hMemory region lengthh]hMemory region length}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjf/ubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hj0h]h gfp_t gfp}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj0ubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hj30hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/0hMhj00ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj/0hMhjf/ubeh}(h]h ]h"]h$]h&]uh1jhjJ/ubjM)}(h**Description**h]j)}(hjU0h]h Description}(hjW0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS0ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJ/ubjM)}(h;Duplicate region of a memory using resource managed kmalloch]h;Duplicate region of a memory using resource managed kmalloc}(hjk0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJ/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmemdup_const (C function)c.devm_kmemdup_consthNtauh1hhjhhhNhNubh)}(hhh](h)}(h\const void * devm_kmemdup_const (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hZconst void *devm_kmemdup_const(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j?)}(hj h]hconst}(hj0hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj0hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubj)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubh)}(hdevm_kmemdup_consth]j)}(hdevm_kmemdup_consth]hdevm_kmemdup_const}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hMubj4)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj0hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj0ubjQ)}(h h]h }(hj 1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubh)}(hhh]j)}(hdeviceh]hdevice}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j)}jsj0sbc.devm_kmemdup_constasbuh1hhj0ubjQ)}(h h]h }(hj=1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjK1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hdevh]hdev}(hjX1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(hconst void *srch](j?)}(hj h]hconst}(hjq1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjm1ubjQ)}(h h]h }(hj~1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjm1ubj)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjm1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm1ubj)}(hsrch]hsrc}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j91c.devm_kmemdup_constasbuh1hhj1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hlenh]hlen}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j91c.devm_kmemdup_constasbuh1hhj2ubjQ)}(h h]h }(hj72hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hgfph]hgfp}(hjE2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj0hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj0hMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMhj0hhubj4)}(hhh]jM)}(h5conditionally duplicate and manage a region of memoryh]h5conditionally duplicate and manage a region of memory}(hjo2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl2hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(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 **Return** source address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.h](jM)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hj2h]hstruct device *dev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h/``const void *src`` memory region to duplicate h](j)}(h``const void *src``h]jS)}(hj2h]hconst void *src}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubj)}(hhh]jM)}(hmemory region to duplicateh]hmemory region to duplicate}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h%``size_t len`` memory region length, h](j)}(h``size_t len``h]jS)}(hj"3h]h size_t len}(hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj3ubj)}(hhh]jM)}(hmemory region length,h]hmemory region length,}(hj;3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj73hMhj83ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj73hMhj2ubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hj[3h]h gfp_t gfp}(hj]3hhhNhNubah}(h]h ]h"]h$]h&]uh1jR·hjY3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjU3ubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hjt3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjp3hMhjq3ubah}(h]h ]h"]h$]h&]uh1jhjU3ubeh}(h]h ]h"]h$]h&]uh1jhjp3hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubjM)}(hosource address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.h]hosource address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubj)}(hlongh]hlong}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubh)}(hdevm_get_free_pagesh]j)}(hdevm_get_free_pagesh]hdevm_get_free_pages}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hMubj4)}(h8(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj44hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj04ubjQ)}(h h]h }(hjA4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj04ubh)}(hhh]j)}(hdeviceh]hdevice}(hjR4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjT4modnameN classnameNjwjz)}j}]j)}jsj4sbc.devm_get_free_pagesasbuh1hhj04ubjQ)}(h h]h }(hjr4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj04ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj04ubj)}(hdevh]hdev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj04ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,4ubj:)}(hgfp_t gfp_maskh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]jn4c.devm_get_free_pagesasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hgfp_maskh]hgfp_mask}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,4ubj:)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hinth]hint}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(horderh]horder}(hj&5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,4ubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj3hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj3hMubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hMhj3hhubj4)}(hhh]jM)}(h!Resource-managed __get_free_pagesh]h!Resource-managed __get_free_pages}(hjP5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjM5hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjh5jHjh5jIjJjKuh1hhhhjhNhNubj)}(hXl**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp_mask`` Allocation gfp flags ``unsigned int order`` Allocation size is (1 << order) pages **Description** Managed get_free_pages. Memory allocated with this function is automatically freed on driver detach. **Return** Address of allocated memory on success, 0 on failure.h](jM)}(h**Parameters**h]j)}(hjr5h]h Parameters}(hjt5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp5ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl5ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj5h]hstruct device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj5ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h(``gfp_t gfp_mask`` Allocation gfp flags h](j)}(h``gfp_t gfp_mask``h]jS)}(hj5h]hgfp_t gfp_mask}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj5ubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h=``unsigned int order`` Allocation size is (1 << order) pages h](j)}(h``unsigned int order``h]jS)}(hj6h]hunsigned int order}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj5ubj)}(hhh]jM)}(h%Allocation size is (1 << order) pagesh]h%Allocation size is (1 << order) pages}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhjl5ubjM)}(h**Description**h]j)}(hj>6h]h Description}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<6ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl5ubjM)}(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.}(hjT6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl5ubjM)}(h **Return**h]j)}(hje6h]hReturn}(hjg6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc6ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl5ubjM)}(h5Address of allocated memory on success, 0 on failure.h]h5Address of allocated memory on success, 0 on failure.}(hj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjl5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_free_pages (C function)c.devm_free_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void devm_free_pages (struct device *dev, unsigned long addr)h]h)}(hhj6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubh)}(hhh]j)}(hdeviceh]hdevice}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsj6sbc.devm_free_pagesasbuh1hhj6ubjQ)}(h h]h }(hj%7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hj37hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hdevh]hdev}(hj@7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjY7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU7ubjQ)}(h h]h }(hjg7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU7ubj)}(hlongh]hlong}(hju7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU7ubj)}(haddrh]haddr}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubeh}(h]h ]h"]h$]h&]jjuh1j3hj6hhhj6hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj6hM ubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hM hj6hhubj4)}(hhh]jM)}(hResource-managed free_pagesh]hResource-managed free_pages}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj7hhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhj6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7jHj7jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` Device this memory belongs to ``unsigned long addr`` Memory to free **Description** Free memory allocated with devm_get_free_pages(). Unlike free_pages, there is no need to supply the **order**.h](jM)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj7ubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hj7h]hstruct device *dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj7ubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj7ubj)}(h&``unsigned long addr`` Memory to free h](j)}(h``unsigned long addr``h]jS)}(hj58h]hunsigned long addr}(hj78hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj38ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj/8ubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hjN8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJ8hM hjK8ubah}(h]h ]h"]h$]h&]uh1jhj/8ubeh}(h]h ]h"]h$]h&]uh1jhjJ8hM hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubjM)}(h**Description**h]j)}(hjp8h]h Description}(hjr8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn8ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj7ubjM)}(hnFree memory allocated with devm_get_free_pages(). Unlike free_pages, there is no need to supply the **order**.h](hdFree memory allocated with devm_get_free_pages(). Unlike free_pages, there is no need to supply the }(hj8hhhNhNubj)}(h **order**h]horder}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __devm_alloc_percpu (C function)c.__devm_alloc_percpuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSvoid __percpu * __devm_alloc_percpu (struct device *dev, size_t size, size_t align)h]h)}(hQvoid __percpu *__devm_alloc_percpu(struct device *dev, size_t size, size_t align)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM#ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhj8hM#ubh__percpu}(hj8hhhNhNubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhj8hM#ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hM#ubh)}(h__devm_alloc_percpuh]j)}(h__devm_alloc_percpuh]h__devm_alloc_percpu}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhj8hM#ubj4)}(h/(struct device *dev, size_t size, size_t align)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj#9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj09hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(hdeviceh]hdevice}(hjA9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjC9modnameN classnameNjwjz)}j}]j)}jsj 9sbc.__devm_alloc_percpuasbuh1hhj9ubjQ)}(h h]h }(hja9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjo9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hdevh]hdev}(hj|9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j]9c.__devm_alloc_percpuasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hsizeh]hsize}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h size_t alignh](h)}(hhh]j)}(hsize_th]hsize_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j]9c.__devm_alloc_percpuasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(halignh]halign}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj8hhhj8hM#ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhj8hM#ubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hM#hj8hhubj4)}(hhh]jM)}(hResource-managed alloc_percpuh]hResource-managed alloc_percpu}(hj6:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM#hj3:hhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhj8hM#ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjN:jHjN:jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to allocate per-cpu memory for ``size_t size`` Size of per-cpu memory to allocate ``size_t align`` Alignment of per-cpu memory to allocate **Description** Managed alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach. **Return** Pointer to allocated memory on success, NULL on failure.h](jM)}(h**Parameters**h]j)}(hjX:h]h Parameters}(hjZ:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV:ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM'hjR:ubj)}(hhh](j)}(h=``struct device *dev`` Device to allocate per-cpu memory for h](j)}(h``struct device *dev``h]jS)}(hjw:h]hstruct device *dev}(hjy:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM$hjq:ubj)}(hhh]jM)}(h%Device to allocate per-cpu memory forh]h%Device to allocate per-cpu memory for}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM$hj:ubah}(h]h ]h"]h$]h&]uh1jhjq:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM$hjn:ubj)}(h3``size_t size`` Size of per-cpu memory to allocate h](j)}(h``size_t size``h]jS)}(hj:h]h size_t size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM%hj:ubj)}(hhh]jM)}(h"Size of per-cpu memory to allocateh]h"Size of per-cpu memory to allocate}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM%hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM%hjn:ubj)}(h9``size_t align`` Alignment of per-cpu memory to allocate h](j)}(h``size_t align``h]jS)}(hj:h]h size_t align}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM&hj:ubj)}(hhh]jM)}(h'Alignment of per-cpu memory to allocateh]h'Alignment of per-cpu memory to allocate}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM&hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM&hjn:ubeh}(h]h ]h"]h$]h&]uh1jhjR:ubjM)}(h**Description**h]j)}(hj$;h]h Description}(hj&;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj";ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM(hjR:ubjM)}(hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.h]hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM'hjR:ubjM)}(h **Return**h]j)}(hjK;h]hReturn}(hjM;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI;ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM*hjR:ubjM)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hja;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM+hjR:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]device-resource-managementah ]h"]device resource managementah$]h&]uh1hhhhhhhhKubeh}(h] driver-basicsah ]h"] driver basicsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj;error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j;j;jmjjjjjPHjMHjjjMjJjDjDjjjjj{j{jjjjj|;jy;u nametypes}(j;jmjjPHjjMjDjjj{jjj|;uh}(j;hjjhhhj'j,j1j6jjjjjjpjMHjjjjH jM j j j. j3 jsjxjjjjjpjujjj`jejjjjjjj!j!jn"js"j $j$jT&jY&j~(j(j*j*j9.j>.jr0jw0j3j3jm7jr7jS;jX;jA=jF=jE?jJ?jIAjNAjBCjGCjLDjQDjVEj[EjFjFjjSHjpHjuHjIjIj^KjcKjLjLj$Nj)NjOjOj#Qj(QjRjRjITjNTjUjUj]WjbWjXjXjZjZj[j[j\j\j^j^j+_j0_jU`jZ`jajajbjbjcjcjejej'gj,gjhjhjjjjjjCj jjŐjʐjjjjjjj^jcjj jؠjݠjjjujzjjjHjMjjjܭjjWj\jҰjװj'j,jjjWj\j~jjjj[j`jjjjjjjjjj jTjYjJjjjjjjjj jjj!jXj]jjjUjZjjjjj,j1jAjFjrjwjjjjjjj6j;j,j1jjjjjjjDjPjmjrjjjjjjj5 j: j j jE jJ jjjjjrjwjjjjjjjZj_jjj{jj"j"j#j#j%j%j'j'j)j)j?+jD+jW-j\-j0j0j 2j2j3j3j 6j6j7j8j':j,:j=j =j?j?jcBjhBjjDjDjDj(Hj-HjfKjkKjDMjIMjPjPjIRjNRj6Tj;TjUVjZVjVYj[Yj[j[j]j]jw^j|^j`j`jajajcj cjejejgjgjijjjljlj*pj/pjqjqjtjtjXwj]wj(yj-yji{jn{j|j|jAjFjsjxjXj]j-j2jjjjjjjȏj͏jjj%j*jjjjjƖj˖j jjXj]jjj-j2jjĤj`jej"j'jjjj jwj|jvj{j߳jjjjjj3j8jƼj˼j\jajjjjjjjjjjjpjujjj jjjjjjCjHjZj_jjjojtj jjjj5j:jKjPjjjYj^jjjjjjj*j/j{jjjjjjjjjjjj>jCjjjjj.j3j~jjjjj#jnjsjjj j jL jQ jjjjj<jAjjjjj,j1j|jj;j@j !j!j"j"j$j$j&j&jP(jU(j!*j&*j+j+j-j-j/j/jS1jX1j$3j)3j4j4j6j6j8j8jh:jm:j9<j><j >j>jH@jM@jBjBjDjDj8Gj=GjIjIjKjKjNjNjfPjkPjRjRjUj UjDWjIWjYjYj[j[j4^j9^j`j`jbjbjejejbgjggjijijljljAnjFnjpjpjrjrjtjujwjwjzjzj}j}jjjjj̆jцjjjjj}jjmjrj]jbj̕jѕj;j@jjjjj jjj$j3j8jGjLj[j`jbjgjOjTj<jAj{jjjj jjjjjjmjrjjjYj^jjjEjJjjj jjjjjjnjsjjjZj_jjjFjKjjj{jj_jdjCjHj'j,j jjjjjjjjjjZj_j>jCj"j'jj jjjjjjjjjzjjjjAjFjjj- j2 j j jjjjjojjjVj[jjjj"jjj !j!j#j#j%j%jF(jK(j*j*j2-j7-j/j/j2j#2j4j4j6j6jM9jR9j;j;j>j>jAjAjEj Ej"Hj'HjiKjnKjNjNjQjQj>UjCUjWjWjYjYj[j[j"^j'^j`j`j&cj+cjejejhjhj ljlj nj%nj4pj9pjHrjMrjbtjgtjj>ji@jn@jBjBj EjEjYGj^GjIjIjKjKjINjNNjPjPjRjRj'Uj,UjwWj|WjYjYj\j\jg^jl^j`j`jcj cjWej\ejgjgjhjhjjjjjljljZnj_nj+pj0pjqjrjsjsjujuj]wjbwj.yj3yjzj{j|j|j~j~jrjwjCjHjjjjj#j(jsjxjÌjȌjjjcjhjjjjjAjFjjjjjj$jojtjjģjjj_jdjjjjj=jBjjjݳjjj!j[j`jjjټj޼jjjjjjjejjjjjjjjjjjXj]jHjMj8j=jjjjjjjjjjjjj jj!j&j5j:j<jAj)j.jjjUjZjjjjj[j`jjjGjLjjj3 j8 j j jj$jjjjj\jajjjHjMjjj4 j9 j"j"j %j%%j'j'jU)jZ)j9+j>+j-j"-j/j/j0j0j2j2j4j4j6j6ju8jz8j4:j9:j<j<j=j>j?j?jAjAjCjCjEjEjpGjuGjTIjYIjKjKjNj NjPjPjSj Sj}UjUjWjWjDZjIZj\j\j0_j5_jajajcjcjmfjrfjhjhjYkj^kjmjmj pj%pjrjrj ujujwjwjyjyj]|jb|j~j~j'j,jjjjjĉjɉjjjjjCjHjjjљj֙jjjjjjjzjjjj~jjjjjjjjjjjjjj"j'j<jAjjjjjj!jHjMjjjjj&j+jvj{jjjjjfjkjjjj jDjIjjjjj4j9jjjjj$j)jtjyjjjjjTjYj%j*jjjjjjjijnj:j?j jjjjjjljqj=jBjjjjj j j j jRjWjjjjj0j5jjjjjjj^jcj j j"j#jN%jS%j'j'j)j)j,,j1,j|.j.j0j0j 3j3jZ5j_5j7j7j9j9jJ<jO<j>j>j@j@jCj CjFEjKEj)Hj.Hj KjKjMjMjPjPjSjSjWjWj5Zj:ZjV]j[]j_j_jajajcjcjfjfjhjhjjjjjamjfmjTpjYpjfsjksjzujujwjwjyjyjj{j{j{j}j~jfjkjjjjjdjij{jjjjjjjjjjxj}jjjRjWjȚj͚jjjjjjjj j=jBj/j4j!j&jjj+j0jHjMjejjjjj$j)jjjjjѴjִjjjjjjjj jj"j'j,jjjjjjjjjhjmjjjjjjj jjjjjjjjjjj jMjRjjjjj{jjjjjjJjOjjjjjijnjjjjjy;jjjjkjpjjj(j-jZj_jjjZj_jjjPjUjjj j j j j j j=jBjjjjjjjjjjjM"jR"j3%j8%jZ(j_(jQ+jV+jg-jl-j0j0j3j3j6j6j8j8u 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]jM)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<ubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKXsourcejuh1j <hj-ubatransform_messages] transformerN include_log] decorationNhhub.