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.hhMubjQ)}(h h]h }(hjJ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7 hhhjI hMubh)}(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 hMubj4)}(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 hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3 hhhjI hMubah}(h]j. ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjI hMhj0 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.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj0 hhhjI hMubeh}(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.hhMhjubj)}(hhh]jM)}(hthe taskh]hthe task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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.hhMhjubj)}(hhh]jM)}(hCPU affinity maskh]hCPU affinity mask}(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 **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.chMSubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjhMSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjhMSubhnotrace}(hjihhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjhMSubh)}(hpreempt_schedule_notraceh]j)}(hpreempt_schedule_notraceh]hpreempt_schedule_notrace}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhjhMSubj4)}(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&]jjuh1j3hjihhhjhMSubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhjhMSubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMShjbhhubj4)}(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.chMShjhhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhjhMSubeh}(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.chMWhjubj)}(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.chMThjubjM)}(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.chM[hjubeh}(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.chM4ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw"hhhj"hM4ubh)}(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"hM4ubj4)}(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"hM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjs"hhhj"hM4ubah}(h]jn"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"hM4hjp"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.chM4hj8#hhubah}(h]h ]h"]h$]h&]uh1j3hjp"hhhj"hM4ubeh}(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_group().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.chM8hjW#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.chM5hjv#ubj)}(hhh]jM)}(hthe cfs_rq whose avg changedh]hthe cfs_rq whose avg changed}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hM5hj#ubah}(h]h ]h"]h$]h&]uh1jhjv#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM5hjs#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.chM7hjW#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.chM6hjW#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.chM:hjW#ubjM)}(h>Updating tg's load_avg is necessary before update_cfs_group().h]h@Updating tg’s load_avg is necessary before update_cfs_group().}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>hjW#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.chM ubjQ)}(h h]h }(hj)$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj($hM ubh)}(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($hM ubj4)}(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($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&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.chM hj%hhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj($hM ubeh}(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_group() 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.chMhj>%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.chM hj]%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%hM hjy%ubah}(h]h ]h"]h$]h&]uh1jhj]%ubeh}(h]h ]h"]h$]h&]uh1jhjx%hM hjZ%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.chMhj%ubj)}(hhh]jM)}(hcfs_rq to updateh]hcfs_rq to update}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjZ%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.chMhj>%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.chMhj>%ubjM)}(hIcfs_rq->avg is used for task_h_load() and update_cfs_group() for example.h]hIcfs_rq->avg is used for task_h_load() and update_cfs_group() for example.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj>%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.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:30: ./kernel/sched/fair.chMhj>%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.chMhj>%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.chMGubjQ)}(h h]h }(hjp&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]&hhhjo&hMGubh)}(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&hMGubj4)}(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&hMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjY&hhhjo&hMGubah}(h]jT&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjo&hMGhjV&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.chMGhj'hhubah}(h]h ]h"]h$]h&]uh1j3hjV&hhhjo&hMGubeh}(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.chMKhj'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.chMHhj'ubj)}(hhh]jM)}(hcfs_rq to attach toh]hcfs_rq to attach to}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hMHhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMHhj'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.chMIhj(ubj)}(hhh]jM)}(hsched_entity to attachh]hsched_entity to attach}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj (hMIhj!(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj (hMIhj'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.chMKhj'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.chMJhj'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.chM~ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj(hM~ubh)}(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(hM~ubj4)}(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(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+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.chM~hj)hhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhj(hM~ubeh}(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.chM-ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{0hhhj0hM-ubh)}(hsched_group_asymh]j)}(hsched_group_asymh]hsched_group_asym}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{0hhhj0hM-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{0hhhj0hM-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjw0hhhj0hM-ubah}(h]jr0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hM-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.chM-hj2hhubah}(h]h ]h"]h$]h&]uh1j3hjt0hhhj0hM-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.chM-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.chM-hjY2ubj)}(hhh]jM)}(hThe load balancing environmenth]hThe load balancing environment}(hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjt2hM-hju2ubah}(h]h ]h"]h$]h&]uh1jhjY2ubeh}(h]h ]h"]h$]h&]uh1jhjt2hM-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.chM-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&]uh1jLhj2hM-hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM-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.chM-hj2ubj)}(hhh]jM)}(hThe candidate busiest grouph]hThe candidate busiest group}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hM-hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM-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.chM-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.chM-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.chM-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.chM-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.chMC/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.chMA/hj9ubj)}(hhh]jM)}(hsched_domain statisticsh]hsched_domain statistics}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMA/hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hMA/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.chMB/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:hMB/hjR:ubah}(h]h ]h"]h$]h&]uh1jhj6:ubeh}(h]h ]h"]h$]h&]uh1jhjQ:hMB/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.chMC/hjo:ubj)}(hhh]jM)}(hsched_group statisticsh]hsched_group statistics}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMC/hj:ubah}(h]h ]h"]h$]h&]uh1jhjo:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMC/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.chME/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.chMD/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.chMG/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.chMH/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.chM0ubjQ)}(h h]h }(hjo;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\;hhhjn;hM0ubh)}(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;hM0ubj4)}(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;hM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjX;hhhjn;hM0ubah}(h]jS;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjn;hM0hjU;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.chM0hjQ<hhubah}(h]h ]h"]h$]h&]uh1j3hjU;hhhjn;hM0ubeh}(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.chM0hjp<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.chM0hj<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<hM0hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM0hj<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.chM0hj<ubj)}(hhh]jM)}(htask which should be ignored.h]htask which should be ignored.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hM0hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM0hj<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.chM0hjp<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.chM0hjp<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.chM1ubjQ)}(h h]h }(hj]=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ=hhhj\=hM1ubh)}(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\=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)}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\=hM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjF=hhhj\=hM1ubah}(h]jA=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\=hM1NhjC=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.chM1hj{>hhubah}(h]h ]h"]h$]h&]uh1j3hjC=hhhj\=hM1ubeh}(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.chM1hj>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.chM1hj>ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing 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)}(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.chM1hj>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.chM1hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj ?hM1hj>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.chM2ubjQ)}(h h]h }(hjdAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRAhhhjcAhM2ubh)}(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_groupasbuh1hhjRAhhhjcAhM2ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRAhhhjcAhM2ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRAhhhjcAhM2ubh)}(hsched_balance_find_src_grouph]j)}(hjAh]hsched_balance_find_src_group}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRAhhhjcAhM2ubj4)}(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&]jjuh1j3hjRAhhhjcAhM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNAhhhjcAhM2ubah}(h]jIAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjcAhM2hjKAhhubj4)}(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.chM2hjNBhhubah}(h]h ]h"]h$]h&]uh1j3hjKAhhhjcAhM2ubeh}(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.chM2hjmBubj)}(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.chM2hjBubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM2hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM2hjBubah}(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.chM2hjmBubjM)}(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.chM2hjmBubjM)}(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.chM2hjmBubh 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.chM2hjCubah}(h]h ]h"]h$]h&]uh1jhj Cubah}(h]h ]h"]h$]h&]bullet-uh1j Chj ChM2hjmBubeh}(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.chMubjQ)}(h h]h }(hjrnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_nhhhjqnhMubj)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_nhhhjqnhMubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_nhhhjqnhMubh)}(hjiffies_to_msecsh]j)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_nhhhjqnhMubj4)}(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_nhhhjqnhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[nhhhjqnhMubah}(h]h ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqnhMhjXnhhubj4)}(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.chMhj5ohhubah}(h]h ]h"]h$]h&]uh1j3hjXnhhhjqnhMubeh}(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.chMhjToubj)}(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.chMhjsoubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjsoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjpoubah}(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.chMhjToubjM)}(hmilliseconds valueh]hmilliseconds value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjToubeh}(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.chM.ubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhM.ubj)}(hlongh]hlong}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhM.ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhM.ubh)}(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&]jjuh1hhjzhhhjzhM.ubj4)}(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&]jjuh1j3hjzhhhjzhM.ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjzhM.ubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhM.hjzhhubj4)}(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.chM.hj{ubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj{hM.hj{hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjzhM.ubeh}(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.chM2hj{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.chM/hj|ubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(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)}(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.chM1hj{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.chM0hj{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.chM2hjw|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.chM4hj|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.chM7hj|ubah}(h]h ]h"]h$]h&]uh1jhjt|ubeh}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj|hM2hj{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.chMDhj{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__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.chMSubjQ)}(h h]h }(hj-}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj,}hMSubj)}(hlongh]hlong}(hj;}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj,}hMSubjQ)}(h h]h }(hjI}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj,}hMSubh)}(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,}hMSubj4)}(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,}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]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.chMShj}ubah}(h]h ]h"]h$]h&]uh1jhj}hhhj~hNubah}(h]h ]h"]h$]h&]j-Cj.Cuh1j Chj~hMShj}hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhj,}hMSubeh}(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.chMWhj!~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.chMThj@~ubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hj_~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[~hMThj\~ubah}(h]h ]h"]h$]h&]uh1jhj@~ubeh}(h]h ]h"]h$]h&]uh1jhj[~hMThj=~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.chMVhj!~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.chMVhj!~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.chMaubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hMaubj)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhj~hMaubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hMaubh)}(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~hMaubj4)}(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~hMaubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhj~hMaubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMahj~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.chMahjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hMaubeh}(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.chMehjubj)}(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.chMbhjubj)}(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 timespec64uh1hhjhMbhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubah}(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.chMdhjubjM)}(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.chMchjubjM)}(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.chMlhjubjM)}(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.chMnhjubjM)}(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.chMqhjubjM)}(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.chMrhjubeh}(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.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hjiffies_to_timespec64h]j)}(hjiffies_to_timespec64h]hjiffies_to_timespec64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jۀah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj݀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 timespec64uh1hhjqnhMhjubeh}(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&]uh1j3hj݀hhhjhMubeh}(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.chMhjTubj)}(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.chMhjsubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(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.chMhjubj)}(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.chMhj˂ubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjȂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǂhMhjpubeh}(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.chM ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj&hM ubh)}(hjiffies64_to_msecsh]j)}(hj#h]hjiffies64_to_msecs}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj&hM ubj4)}(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&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!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.chM hjĉhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj&hM ubeh}(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.chM hjubj)}(hhh]jM)}(hjiffies64 valueh]hjiffies64 value}(hj!hhhNhNubah}(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 **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.chM hjubjM)}(hmilliseconds valueh]hmilliseconds value}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjubeh}(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.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hnsecs_to_jiffies64h]j)}(hjh]hnsecs_to_jiffies64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj}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.chMhj/hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhjhMubeh}(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.chMhjNubj)}(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.chMhjmubj)}(hhh]jM)}(h nsecs in u64h]h nsecs in u64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubah}(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.chMhjNubjM)}(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.chMhjNubjM)}(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.chM!hjNubji)}(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.chM"hjubah}(h]h ]h"]h$]h&]uh1jhhjhM"hjNubjM)}(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%hjNubjM)}(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.chM&hjNubeh}(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.chMBhjubji)}(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.chMChjubah}(h]h ]h"]h$]h&]uh1jhhjɍhMChjubjM)}(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.chMFhjubjM)}(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.chMGhjubeh}(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.chMPubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hMPubh)}(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$hMPubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hMPubh)}(htimespec64_add_safeh]j)}(hjTh]htimespec64_add_safe}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj$hMPubj4)}(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$hMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj$hMPubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$hMPhj 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.chMPhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj$hMPubeh}(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.chMThjubj)}(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.chMRhj̏ubj)}(hhh]jM)}(hfirst (left) timespec64 to addh]hfirst (left) timespec64 to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhj̏ubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjɏ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.chMShjubj)}(hhh]jM)}(h second (right) timespec64 to addh]h second (right) timespec64 to add}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMShj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMShjɏ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.chMUhjubjM)}(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.chMThjubjM)}(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.chMWhjubjM)}(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.chMXhjubeh}(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.chMlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΐhhhjhMlubh)}(hget_timespec64h]j)}(hget_timespec64h]hget_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjΐhhhjhMlubj4)}(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ΐhhhjhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjʐhhhjhMlubah}(h]jŐah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMlhjǐ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.chMlhj,hhubah}(h]h ]h"]h$]h&]uh1j3hjǐhhhjhMlubeh}(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.chMphjKubj)}(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.chMmhjjubj)}(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 timespec64uh1hhjhMmhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjgubj)}(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.chMnhj’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ݒhMnhjubeh}(h]h ]h"]h$]h&]uh1jLhjݒhMnhjޒubah}(h]h ]h"]h$]h&]uh1jhj’ubeh}(h]h ]h"]h$]h&]uh1jhjݒhMnhjgubeh}(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.chMphjKubjM)}(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.chMohjKubjM)}(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.chMqhjKubjM)}(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.chMrhjKubeh}(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.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hput_timespec64h]j)}(hput_timespec64h]hput_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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.chMhj&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 timespec64uh1hhjAhMhjEubeh}(h]h ]h"]h$]h&]uh1jLhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#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.chMhj~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_timespecuh1hhjhMhjubeh}(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&]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_timespec32uh1hhjqnhMhjubh! 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_itimerspecuh1hhjqnhMhjȜ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 itimerspec64uh1hhjqnhMhjubh? 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.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hget_old_itimerspec32h]j)}(hget_old_itimerspec32h]hget_old_itimerspec32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(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&]jjuh1j3hjhhhjhM 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)}(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_itimerspec32uh1hhjqnhMhjBubh into kernel space}(hjBhhhNhNubeh}(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&]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.chM hjubj)}(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 itimerspec64uh1hhjhM hjĢubeh}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hput_old_itimerspec32h]j)}(hput_old_itimerspec32h]hput_old_itimerspec32}(hjãhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(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 itimerspec64uh1hhjqnhMhjubh 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_itimerspec32uh1hhjqnhMhjubh! 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&]uh1j3hjhhhjhMubeh}(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.chM"hjfubj)}(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.chM hjubj)}(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 itimerspec64uh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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.chM!hjݥ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_itimerspec32uh1hhjhM!hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjݥubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubeh}(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.chM#hjfubjM)}(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.chM#hjfubeh}(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.hhKChjhhubah}(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.hhKGhjubj)}(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.hhKIhjubjM)}(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.hhKNhjubj)}(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.hhKEhjubj)}(hhh]jM)}(hembedded timer structureh]hembedded timer structure}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hKEhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKEhj 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.hhKEhjGubj)}(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.hhKFhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKEhj 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.hhKIhjhhubjM)}(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.hhKFhjhhubh)}(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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jshrtimer_forward_nowsbc.hrtimer_forward_nowasbuh1hhjhhhY/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_forward_nowh]j)}(hjh]hhrtimer_forward_now}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM)ubj4)}(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}]jc.hrtimer_forward_nowasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hktime_t intervalh](h)}(hhh]j)}(hktime_th]hktime_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]jc.hrtimer_forward_nowasbuh1hhjPubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hintervalh]hinterval}(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)}(h0forward the timer expiry so it expires after nowh]h0forward the timer expiry so it expires after now}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM)hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM)ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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.hhM-hjubj)}(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.hhM*hjubj)}(hhh]jM)}(hhrtimer to forwardh]hhrtimer to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]jS)}(hj'h]hktime_t interval}(hj)hhhNhNubah}(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+hj!ubj)}(hhh]jM)}(hthe interval to forwardh]hthe interval to forward}(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+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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM-hjubjM)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM,hjubeh}(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&]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_update_functionh]j)}(hhrtimer_update_functionh]hhrtimer_update_function}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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*}(hj0hhhNhNubah}(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}(hjVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubh)}(hhh]j)}(hhrtimer_restarth]hhrtimer_restart}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]jc.hrtimer_update_functionasbuh1hhjRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjsh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hfunctionh]hfunction}(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)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_update_functionasbuh1hhjRubj)}(hjh]h*}(hjhhhNhNubah}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$Update the timer's callback functionh]h&Update the timer’s callback function}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(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)}(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.chMhjpubj)}(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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hTimer to updateh]hTimer to update}(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 *)`` 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&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hNew callback functionh]hNew callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjpubjM)}(hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).h]hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjpubeh}(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.chM.ubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjrhM.ubh)}(hhrtimer_forwardh]j)}(hjoh]hhrtimer_forward}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjrhM.ubj4)}(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&]jjuh1j3hjJhhhjrhM.ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjrhM.ubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhM.hjChhubj4)}(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.chM.hjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjrhM.ubeh}(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.chM2hjubj)}(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.chM/hjubj)}(hhh]jM)}(hhrtimer to forwardh]hhrtimer to forward}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(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.chM0hj%ubj)}(hhh]jM)}(hforward past this timeh]hforward past this time}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM0hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM0hjubj)}(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.chM1hj^ubj)}(hhh]jM)}(hthe interval to forwardh]hthe interval to forward}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM1hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM1hjubeh}(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.chM3hjubjM)}(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.chM2hjubhnote)}(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.chM5hjubah}(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.chM7hjubjM)}(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.chM9hjubjM)}(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.chM:hjubjM)}(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.chM2ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM2ubh)}(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&]jjuh1hhjhhhjhM2ubj4)}(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&]jjuh1j3hjhhhjhM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM2ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM2hjhhubj4)}(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.chM2hj]hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM2ubeh}(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.chM6hj|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.chM3hjubj)}(hhh]jM)}(hthe timer to be addedh]hthe timer to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(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.chM4hjubj)}(hhh]jM)}(h expiry timeh]h expiry time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(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.chM5hj ubj)}(hhh]jM)}(h"slack" range for the timerh]h“slack” range for the timer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hM5hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM5hjubj)}(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.chM8hjFubj)}(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.chM6hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM8hjubeh}(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.chM:hj|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.chM:hj|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.chM<hj|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.chM;hj|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.chMcubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMcubh)}(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&]jjuh1hhjhhhjhMcubj4)}(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&]jjuh1j3hjhhhjhMcubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMcubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMchjhhubj4)}(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.chMchjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMcubeh}(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.chMghjubj)}(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.chMdhjubj)}(hhh]jM)}(hhrtimer to stoph]hhrtimer to stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMdhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMdhjubah}(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.chMfhjubji)}(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.chMghjMubah}(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.chMhhjeubah}(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.chMihj}ubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]j-Cjuh1j Chj^hMghjFubah}(h]h ]h"]h$]h&]uh1jhhj^hMghjubeh}(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.chMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhMubh)}(h hrtimer_setuph]j)}(h hrtimer_setuph]h hrtimer_setup}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhMubj4)}(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&]jjuh1j3hj5hhhjGhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhMubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhMhj.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.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhMubeh}(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.chMhjubj)}(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)}(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.chMhjubj)}(hhh]jM)}(hthe callback functionh]hthe callback function}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(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.chMhj>ubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjubj)}(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.chMhjwubj)}(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.chMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubji)}(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.chMhjubah}(h]h ]h"]h$]h&]uh1jhhjhMhjubeh}(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.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(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&]jjuh1hhjhhhjhM ubj4)}(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&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(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.chM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(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.chM$ hj 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.chM! hj*ubj)}(hhh]jM)}(hsleeper to be startedh]hsleeper to be started}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM! hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM! hj'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.chM" hjcubj)}(hhh]jM)}(htimer mode abs/relh]htimer mode abs/rel}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM$ hj 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.chM# hj 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.chM[ ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM[ 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&]jjuh1hhjhhhjhM[ 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&]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$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.chM[ hjQhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM[ 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.chM\ hjubj)}(hhh]jM)}(hsleeper to be initializedh]hsleeper to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM\ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\ hjubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]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.chM] hjubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM] hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM] 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.chM^ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_ hjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]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.chMpubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlBhhhj~BhMpubh)}(h finish_waith]j)}(h finish_waith]h finish_wait}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlBhhhj~BhMpubj4)}(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~BhMpubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhBhhhj~BhMpubah}(h]jcBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~BhMphjeBhhubj4)}(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.chMphjChhubah}(h]h ]h"]h$]h&]uh1j3hjeBhhhj~BhMpubeh}(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.chMthjCubj)}(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.chMqhjCubj)}(hhh]jM)}(hwaitqueue waited onh]hwaitqueue waited on}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMqhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMqhjCubj)}(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.chMrhjDubj)}(hhh]jM)}(hwait descriptorh]hwait descriptor}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/DhMrhj0Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj/DhMrhjCubeh}(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.chMthjCubjM)}(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.chMshjCubeh}(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.chMDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjDhMDubh)}(hwait_task_stoppedh]j)}(hwait_task_stoppedh]hwait_task_stopped}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjDhMDubj4)}(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&]jjuh1j3hjDhhhjDhMDubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjDhMDubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMDhjDhhubj4)}(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.chMDhjFhhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhjDhMDubeh}(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.chMHhjSFubj)}(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.chMEhjrFubj)}(hhh]jM)}(h wait optionsh]h wait options}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMEhjFubah}(h]h ]h"]h$]h&]uh1jhjrFubeh}(h]h ]h"]h$]h&]uh1jhjFhMEhjoFubj)}(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.chMFhjFubj)}(hhh]jM)}(his the wait for ptraceh]his the wait for ptrace}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMFhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMFhjoFubj)}(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.chMGhjFubj)}(hhh]jM)}(htask to wait forh]htask to wait for}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMGhjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMGhjoFubeh}(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.chMIhjSFubjM)}(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.chMHhjSFubjM)}(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.chMJhjSFubjM)}(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.chMKhjGubhL), 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&]uh1jLhjGhMKhjSFubjM)}(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.chMNhjSFubjM)}(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.chMOhjSFubeh}(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.chKubjQ)}(h h]h }(hjCHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1HhhhjBHhKubh)}(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&]jjuh1hhj1HhhhjBHhKubj4)}(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&]jjuh1j3hj1HhhhjBHhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-HhhhjBHhKubah}(h]j(Hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBHhKhj*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.chKhjBIhhubah}(h]h ]h"]h$]h&]uh1j3hj*HhhhjBHhKubeh}(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.chKhjaIubj)}(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.chKhjIubj)}(hhh]jM)}(h target taskh]h target task}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhKhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj}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.chKhjIubj)}(hhh]jM)}(hpending bits to seth]hpending bits to set}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhKhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj}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.chKhjaIubjM)}(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.chMubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoKhhhjKhMubh)}(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&]jjuh1hhjoKhhhjKhMubj4)}(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&]jjuh1j3hjoKhhhjKhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkKhhhjKhMubah}(h]jfKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhMhjhKhhubj4)}(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.chMhj0Lhhubah}(h]h ]h"]h$]h&]uh1j3hjhKhhhjKhMubeh}(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.chMhjOLubj)}(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.chMhjnLubj)}(hhh]jM)}(h target taskh]h target task}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjnLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjkLubah}(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.chMhjOLubjM)}(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.chMhjOLubjM)}(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.chMhjOLubjM)}(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.chMhjOLubeh}(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.chM0hj~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.chM0hj~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.chM/hj~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.chM3hj~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.chM6hj~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.chM7hj~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.chMHubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj PhhhjPhMHubh)}(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 PhhhjPhMHubj4)}(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 PhhhjPhMHubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMHubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMHhjPhhubj4)}(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.chMHhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMHubeh}(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.chMLhjPubj)}(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.chMIhj 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%QhMIhj&Qubah}(h]h ]h"]h$]h&]uh1jhj Qubeh}(h]h ]h"]h$]h&]uh1jhj%QhMIhjQubah}(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.chMKhjPubjM)}(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.chMJhjPubjM)}(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.chMOhjPubjM)}(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.chMPhjPubjM)}(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.chMRhjPubjM)}(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.chMShjPubeh}(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.chM2ubjQ)}(h h]h }(hjeRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRRhhhjdRhM2ubh)}(hptrace_trap_notifyh]j)}(hptrace_trap_notifyh]hptrace_trap_notify}(hjwRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsRubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRRhhhjdRhM2ubj4)}(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&]jjuh1j3hjRRhhhjdRhM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNRhhhjdRhM2ubah}(h]jIRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdRhM2hjKRhhubj4)}(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.chM2hjShhubah}(h]h ]h"]h$]h&]uh1j3hjKRhhhjdRhM2ubeh}(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.chM6hj2Subj)}(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.chM3hjQSubj)}(hhh]jM)}(htracee wanting to notify tracerh]htracee wanting to notify tracer}(hjpShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlShM3hjmSubah}(h]h ]h"]h$]h&]uh1jhjQSubeh}(h]h ]h"]h$]h&]uh1jhjlShM3hjNSubah}(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.chM5hj2SubjM)}(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.chM4hj2SubjM)}(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.chM8hj2SubjM)}(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.chM>hj2SubjM)}(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.chM?hj2Subeh}(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.chM ubjQ)}(h h]h }(hjRThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ThhhjQThM ubh)}(hforce_sig_seccomph]j)}(hforce_sig_seccomph]hforce_sig_seccomp}(hjdThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Tubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?ThhhjQThM ubj4)}(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?ThhhjQThM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;ThhhjQThM ubah}(h]j6Tah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQThM hj8Thhubj4)}(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.chM hj,Uhhubah}(h]h ]h"]h$]h&]uh1j3hj8ThhhjQThM ubeh}(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.chM hjjUubj)}(hhh]jM)}(h"syscall number to send to userlandh]h"syscall number to send to userland}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhM hjUubah}(h]h ]h"]h$]h&]uh1jhjjUubeh}(h]h ]h"]h$]h&]uh1jhjUhM hjgUubj)}(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.chMn ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hMn 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[hMn 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[hMn ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhj[hMn ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hMn 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.chMn hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hMn 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.chMr 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.chMo 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.chMt 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.chMw 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.chMx 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.chMt ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhj`hMt 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`hMt 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`hMt ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hMt ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMt 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.chMt hj ahhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hMt 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.chMx 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.chMz 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&]uh1jhjfahMz 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.chMubjQ)}(h h]h }(hjFphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3phhhjEphMubh)}(hsys_killh]j)}(hsys_killh]hsys_kill}(hjXphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTpubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3phhhjEphMubj4)}(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&]jjuh1j3hj3phhhjEphMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/phhhjEphMubah}(h]j*pah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEphMhj,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.chMhjqhhubah}(h]h ]h"]h$]h&]uh1j3hj,phhhjEphMubeh}(h]h ](jAfunctioneh"]h$]h&]jjFjAjGjqjHjqjIjJjKuh1hhhhjDhNhNubj)}(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.chMhj 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.chMhj?qubj)}(hhh]jM)}(hthe PID of the processh]hthe PID of the process}(hj^qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZqhMhj[qubah}(h]h ]h"]h$]h&]uh1jhj?qubeh}(h]h ]h"]h$]h&]uh1jhjZqhMhjuubah}(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&]jjuh1j3hjthhhjuhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjuhMRubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMRhjthhubj4)}(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.chMRhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjuhMRubeh}(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.chMVhj2vubj)}(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.chMShjQvubj)}(hhh]jM)}(h!the thread group ID of the threadh]h!the thread group ID of the thread}(hjpvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlvhMShjmvubah}(h]h ]h"]h$]h&]uh1jhjQvubeh}(h]h ]h"]h$]h&]uh1jhjlvhMShjNvubj)}(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.chMThjvubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMThjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMThjNvubj)}(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.chMUhjvubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMUhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMUhjNvubeh}(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.chMWhj2vubji)}(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.chMVhjwubah}(h]h ]h"]h$]h&]uh1jhhj>whMVhj2vubeh}(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.chMeubjQ)}(h h]h }(hjtwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjawhhhjswhMeubh)}(h sys_tkillh]j)}(h sys_tkillh]h sys_tkill}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjawhhhjswhMeubj4)}(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&]jjuh1j3hjawhhhjswhMeubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]whhhjswhMeubah}(h]jXwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjswhMehjZwhhubj4)}(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.chMehj/xhhubah}(h]h ]h"]h$]h&]uh1j3hjZwhhhjswhMeubeh}(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.chMihjNxubj)}(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.chMfhjmxubj)}(hhh]jM)}(hthe PID of the taskh]hthe PID of the task}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMfhjxubah}(h]h ]h"]h$]h&]uh1jhjmxubeh}(h]h ]h"]h$]h&]uh1jhjxhMfhjjxubj)}(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.chMghjxubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMghjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMghjjxubeh}(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.chMihjNxubji)}(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.chMhhjxubah}(h]h ]h"]h$]h&]uh1jhhjyhMhhjNxubeh}(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.chMubjQ)}(h h]h }(hjDyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1yhhhjCyhMubh)}(hsys_rt_sigqueueinfoh]j)}(hsys_rt_sigqueueinfoh]hsys_rt_sigqueueinfo}(hjVyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRyubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1yhhhjCyhMubj4)}(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&]jjuh1j3hj1yhhhjCyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-yhhhjCyhMubah}(h]j(yah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjCyhMhj*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.chMhjfzhhubah}(h]h ]h"]h$]h&]uh1j3hj*yhhhjCyhMubeh}(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.chMhjzubj)}(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.chMhjzubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubj)}(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.chMhjzubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubj)}(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.chMhj{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.chMhj2{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj1{hMhjzubeh}(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.chM!hjVubj)}(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.chM hjubj)}(hhh]jM)}(h#used to save the previous sigactionh]h#used to save the previous sigaction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubj)}(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.chM"hj 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.chM!hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM"hjrubeh}(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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_kill (C function)c.percpu_ref_killhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void percpu_ref_kill (struct percpu_ref *ref)h]h)}(h,void percpu_ref_kill(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hpercpu_ref_killh]j)}(hpercpu_ref_killh]hpercpu_ref_kill}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](j?)}(hjBh]hstruct}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j)}jsj sbc.percpu_ref_killasbuh1hhj ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hrefh]href}(hj}hhhNhNubah}(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)}(hdrop the initial refh]hdrop the initial ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXf**Parameters** ``struct percpu_ref *ref`` percpu_ref to kill **Description** Must be used to drop the initial ref on a percpu refcount; must be called precisely once before shutdown. Switches **ref** into atomic mode before gathering up the percpu counters and dropping the initial ref. There are no implied RCU grace periods between kill and release.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]j)}(h.``struct percpu_ref *ref`` percpu_ref to kill h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hpercpu_ref to killh]hpercpu_ref to kill}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hiMust be used to drop the initial ref on a percpu refcount; must be called precisely once before shutdown.h]hiMust be used to drop the initial ref on a percpu refcount; must be called precisely once before shutdown.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hgSwitches **ref** into atomic mode before gathering up the percpu counters and dropping the initial ref.h](h Switches }(hjHhhhNhNubj)}(h**ref**h]href}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhW into atomic mode before gathering up the percpu counters and dropping the initial ref.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(h@There are no implied RCU grace periods between kill and release.h]h@There are no implied RCU grace periods between kill and release.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h percpu_ref_get_many (C function)c.percpu_ref_get_manyhNtauh1hhjhhhNhNubh)}(hhh](h)}(hCvoid percpu_ref_get_many (struct percpu_ref *ref, unsigned long nr)h]h)}(hBvoid percpu_ref_get_many(struct percpu_ref *ref, unsigned long nr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hpercpu_ref_get_manyh]j)}(hpercpu_ref_get_manyh]hpercpu_ref_get_many}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h*(struct percpu_ref *ref, unsigned long nr)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_get_manyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned long nrh](j)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(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)}(hincrement a percpu refcounth]hincrement a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct percpu_ref *ref`` percpu_ref to get ``unsigned long nr`` number of references to get **Description** Analogous to atomic_long_add(). This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh](j)}(h-``struct percpu_ref *ref`` percpu_ref to get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hpercpu_ref to geth]hpercpu_ref to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``unsigned long nr`` number of references to get h](j)}(h``unsigned long nr``h]jS)}(hj#h]hunsigned long nr}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hnumber of references to geth]hnumber of references to get}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubeh}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hAnalogous to atomic_long_add().h]hAnalogous to atomic_long_add().}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_get (C function)c.percpu_ref_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void percpu_ref_get (struct percpu_ref *ref)h]h)}(h+void percpu_ref_get(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hpercpu_ref_geth]j)}(hpercpu_ref_geth]hpercpu_ref_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_getasbuh1hhjubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjZhhhNhNubah}(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)}(hincrement a percpu refcounth]hincrement a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct percpu_ref *ref`` percpu_ref to get **Description** Analogous to atomic_long_inc(). This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]j)}(h-``struct percpu_ref *ref`` percpu_ref to get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hpercpu_ref to geth]hpercpu_ref to get}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hAnalogous to atomic_long_inc().h]hAnalogous to atomic_long_inc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hj%hhhNhNubj)}(h**ref**h]href}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh is between init and exit.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#percpu_ref_tryget_many (C function)c.percpu_ref_tryget_manyhNtauh1hhjhhhNhNubh)}(hhh](h)}(hFbool percpu_ref_tryget_many (struct percpu_ref *ref, unsigned long nr)h]h)}(hEbool percpu_ref_tryget_many(struct percpu_ref *ref, unsigned long nr)h](j)}(hjh]hbool}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjshKubh)}(hpercpu_ref_tryget_manyh]j)}(hpercpu_ref_tryget_manyh]hpercpu_ref_tryget_many}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjshKubj4)}(h*(struct percpu_ref *ref, unsigned long nr)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_tryget_manyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned long nrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnrh]hnr}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjshKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjshKubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshKhj[hhubj4)}(hhh]jM)}(h"try to increment a percpu refcounth]h"try to increment a percpu refcount}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjshhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjshKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXU**Parameters** ``struct percpu_ref *ref`` percpu_ref to try-get ``unsigned long nr`` number of references to get **Description** Increment a percpu refcount by **nr** unless its count already reached zero. Returns ``true`` on success; ``false`` on failure. This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh](j)}(h1``struct percpu_ref *ref`` percpu_ref to try-get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hpercpu_ref to try-geth]hpercpu_ref to try-get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``unsigned long nr`` number of references to get h](j)}(h``unsigned long nr``h]jS)}(hjh]hunsigned long nr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubj)}(hhh]jM)}(hnumber of references to geth]hnumber of references to get}(hj hhhNhNubah}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hIncrement a percpu refcount by **nr** unless its count already reached zero. Returns ``true`` on success; ``false`` on failure.h](h Increment a percpu refcount by }(hjAhhhNhNubj)}(h**nr**h]hnr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh0 unless its count already reached zero. Returns }(hjAhhhNhNubjS)}(h``true``h]htrue}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubh on success; }(hjAhhhNhNubjS)}(h ``false``h]hfalse}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubh on failure.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_tryget (C function)c.percpu_ref_trygethNtauh1hhjhhhNhNubh)}(hhh](h)}(h/bool percpu_ref_tryget (struct percpu_ref *ref)h]h)}(h.bool percpu_ref_tryget(struct percpu_ref *ref)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hpercpu_ref_trygeth]j)}(hpercpu_ref_trygeth]hpercpu_ref_tryget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_trygetasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(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"try to increment a percpu refcounth]h"try to increment a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to try-get **Description** Increment a percpu refcount unless its count already reached zero. Returns ``true`` on success; ``false`` on failure. This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubj)}(hhh]j)}(h1``struct percpu_ref *ref`` percpu_ref to try-get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubj)}(hhh]jM)}(hpercpu_ref to try-geth]hpercpu_ref to try-get}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubjM)}(huIncrement a percpu refcount unless its count already reached zero. Returns ``true`` on success; ``false`` on failure.h](hKIncrement a percpu refcount unless its count already reached zero. Returns }(hjhhhNhNubjS)}(h``true``h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh on success; }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjKhhhNhNubj)}(h**ref**h]href}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh is between init and exit.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'percpu_ref_tryget_live_rcu (C function)c.percpu_ref_tryget_live_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool percpu_ref_tryget_live_rcu (struct percpu_ref *ref)h]h)}(h7bool percpu_ref_tryget_live_rcu(struct percpu_ref *ref)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hpercpu_ref_tryget_live_rcuh]j)}(hpercpu_ref_tryget_live_rcuh]hpercpu_ref_tryget_live_rcu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_tryget_live_rcuasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(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)}(hNsame as percpu_ref_tryget_live() but the caller is responsible for taking RCU.h]hNsame as percpu_ref_tryget_live() but the caller is responsible for taking RCU.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct percpu_ref *ref`` percpu_ref to try-get **Description** This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjgubj)}(hhh]j)}(h1``struct percpu_ref *ref`` percpu_ref to try-get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjubj)}(hhh]jM)}(hpercpu_ref to try-geth]hpercpu_ref to try-get}(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)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjgubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#percpu_ref_tryget_live (C function)c.percpu_ref_tryget_livehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4bool percpu_ref_tryget_live (struct percpu_ref *ref)h]h)}(h3bool percpu_ref_tryget_live(struct percpu_ref *ref)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM%ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj+hM%ubh)}(hpercpu_ref_tryget_liveh]j)}(hpercpu_ref_tryget_liveh]hpercpu_ref_tryget_live}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj+hM%ubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](j?)}(hjBh]hstruct}(hjZhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjVubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsj@sbc.percpu_ref_tryget_liveasbuh1hhjVubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubah}(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'try to increment a live percpu refcounth]h'try to increment a live percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM%hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj+hM%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX3**Parameters** ``struct percpu_ref *ref`` percpu_ref to try-get **Description** Increment a percpu refcount unless it has already been killed. Returns ``true`` on success; ``false`` on failure. Completion of percpu_ref_kill() in itself doesn't guarantee that this function will fail. For such guarantee, percpu_ref_kill_and_confirm() should be used. After the confirm_kill callback is invoked, it's guaranteed that no new reference will be given out by percpu_ref_tryget_live(). This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM)hjubj)}(hhh]j)}(h1``struct percpu_ref *ref`` percpu_ref to try-get h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM&hjubj)}(hhh]jM)}(hpercpu_ref to try-geth]hpercpu_ref to try-get}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM&hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM&hjubah}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM(hjubjM)}(hrIncrement a percpu refcount unless it has already been killed. Returns ``true`` on success; ``false`` on failure.h](hHIncrement a percpu refcount unless it has already been killed. Returns }(hjohhhNhNubjS)}(h``true``h]htrue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh on success; }(hjohhhNhNubjS)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh on failure.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM'hjubjM)}(hXCompletion of percpu_ref_kill() in itself doesn't guarantee that this function will fail. For such guarantee, percpu_ref_kill_and_confirm() should be used. After the confirm_kill callback is invoked, it's guaranteed that no new reference will be given out by percpu_ref_tryget_live().h]hX"Completion of percpu_ref_kill() in itself doesn’t guarantee that this function will fail. For such guarantee, percpu_ref_kill_and_confirm() should be used. After the confirm_kill callback is invoked, it’s guaranteed that no new reference will be given out by percpu_ref_tryget_live().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM*hjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h percpu_ref_put_many (C function)c.percpu_ref_put_manyhNtauh1hhjhhhNhNubh)}(hhh](h)}(hCvoid percpu_ref_put_many (struct percpu_ref *ref, unsigned long nr)h]h)}(hBvoid percpu_ref_put_many(struct percpu_ref *ref, unsigned long nr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM>ubh)}(hpercpu_ref_put_manyh]j)}(hpercpu_ref_put_manyh]hpercpu_ref_put_many}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM>ubj4)}(h*(struct percpu_ref *ref, unsigned long nr)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_put_manyasbuh1hhj+ubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubj:)}(hunsigned long nrh](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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnrh]hnr}(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)}(hdecrement a percpu refcounth]hdecrement a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM>hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX4**Parameters** ``struct percpu_ref *ref`` percpu_ref to put ``unsigned long nr`` number of references to put **Description** Decrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init()) This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMBhjubj)}(hhh](j)}(h-``struct percpu_ref *ref`` percpu_ref to put h](j)}(h``struct percpu_ref *ref``h]jS)}(hjDh]hstruct percpu_ref *ref}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM?hj>ubj)}(hhh]jM)}(hpercpu_ref to puth]hpercpu_ref to put}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhM?hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM?hj;ubj)}(h1``unsigned long nr`` number of references to put h](j)}(h``unsigned long nr``h]jS)}(hj}h]hunsigned long nr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM@hjwubj)}(hhh]jM)}(hnumber of references to puth]hnumber of references to put}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM@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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMBhjubjM)}(hcDecrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init())h]hcDecrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMAhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_put (C function)c.percpu_ref_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void percpu_ref_put (struct percpu_ref *ref)h]h)}(h+void percpu_ref_put(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMVubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj,hMVubh)}(hpercpu_ref_puth]j)}(hpercpu_ref_puth]hpercpu_ref_put}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj,hMVubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](j?)}(hjBh]hstruct}(hj[hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjWubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j)}jsjAsbc.percpu_ref_putasbuh1hhjWubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj,hMVubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj,hMVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hMVhjhhubj4)}(hhh]jM)}(hdecrement a percpu refcounth]hdecrement a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMVhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj,hMVubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to put **Description** Decrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init()) This function is safe to call as long as **ref** is between init and exit.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMZhjubj)}(hhh]j)}(h-``struct percpu_ref *ref`` percpu_ref to put h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMWhjubj)}(hhh]jM)}(hpercpu_ref to puth]hpercpu_ref to put}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMWhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMWhjubah}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMYhjubjM)}(hcDecrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init())h]hcDecrement the refcount, and if 0, call the release function (which was passed to percpu_ref_init())}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMXhjubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is between init and exit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h percpu_ref_is_dying (C function)c.percpu_ref_is_dyinghNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool percpu_ref_is_dying (struct percpu_ref *ref)h]h)}(h0bool percpu_ref_is_dying(struct percpu_ref *ref)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMdubh)}(hpercpu_ref_is_dyingh]j)}(hpercpu_ref_is_dyingh]hpercpu_ref_is_dying}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMdubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_is_dyingasbuh1hhjubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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/test whether a percpu refcount is dying or deadh]h/test whether a percpu refcount is dying or dead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMdhj|hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to test **Description** Returns ``true`` if **ref** is dying or dead. This function is safe to call as long as **ref** is between init and exit and the caller is responsible for synchronizing against state changes.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhhjubj)}(hhh]j)}(h.``struct percpu_ref *ref`` percpu_ref to test h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMehjubj)}(hhh]jM)}(hpercpu_ref to testh]hpercpu_ref to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubah}(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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMghjubjM)}(h-Returns ``true`` if **ref** is dying or dead.h](hReturns }(hjhhhNhNubjS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh if }(hjhhhNhNubj)}(h**ref**h]href}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is dying or dead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMfhjubjM)}(hThis function is safe to call as long as **ref** is between init and exit and the caller is responsible for synchronizing against state changes.h](h)This function is safe to call as long as }(hjDhhhNhNubj)}(h**ref**h]href}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh` is between init and exit and the caller is responsible for synchronizing against state changes.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:93: ./include/linux/percpu-refcount.hhMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_init (C function)c.percpu_ref_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(hgint percpu_ref_init (struct percpu_ref *ref, percpu_ref_func_t *release, unsigned int flags, gfp_t gfp)h]h)}(hfint percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release, unsigned int flags, gfp_t gfp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK1ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK1ubh)}(hpercpu_ref_inith]j)}(hpercpu_ref_inith]hpercpu_ref_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK1ubj4)}(hS(struct percpu_ref *ref, percpu_ref_func_t *release, unsigned int flags, gfp_t gfp)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_initasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hpercpu_ref_func_t *releaseh](h)}(hhh]j)}(hpercpu_ref_func_th]hpercpu_ref_func_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]jc.percpu_ref_initasbuh1hhj0ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hreleaseh]hrelease}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hflagsh]hflags}(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.percpu_ref_initasbuh1hhjubjQ)}(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&]jjuh1j3hjhhhjhK1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhK1ubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK1hjzhhubj4)}(hhh]jM)}(hinitialize a percpu refcounth]hinitialize a percpu refcount}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK1hj0hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhK1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to initialize ``percpu_ref_func_t *release`` function which will be called when refcount hits 0 ``unsigned int flags`` PERCPU_REF_INIT_* flags ``gfp_t gfp`` allocation mask to use **Description** Initializes **ref**. **ref** starts out in percpu mode with a refcount of 1 unless **flags** contains PERCPU_REF_INIT_ATOMIC or PERCPU_REF_INIT_DEAD. These flags change the start state to atomic with the latter setting the initial refcount to 0. See the definitions of PERCPU_REF_INIT_* flags for flag behaviors. Note that **release** must not sleep - it may potentially be called from RCU callback context by percpu_ref_kill().h](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK5hjOubj)}(hhh](j)}(h4``struct percpu_ref *ref`` percpu_ref to initialize h](j)}(h``struct percpu_ref *ref``h]jS)}(hjth]hstruct percpu_ref *ref}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK2hjnubj)}(hhh]jM)}(hpercpu_ref to initializeh]hpercpu_ref to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhK2hjkubj)}(hR``percpu_ref_func_t *release`` function which will be called when refcount hits 0 h](j)}(h``percpu_ref_func_t *release``h]jS)}(hjh]hpercpu_ref_func_t *release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK3hjubj)}(hhh]jM)}(h2function which will be called when refcount hits 0h]h2function which will be called when refcount hits 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK3hjkubj)}(h/``unsigned int flags`` PERCPU_REF_INIT_* flags h](j)}(h``unsigned int flags``h]jS)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK4hjubj)}(hhh]jM)}(hPERCPU_REF_INIT_* flagsh]hPERCPU_REF_INIT_* flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjkubj)}(h%``gfp_t gfp`` allocation mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hjh]h gfp_t gfp}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK5hjubj)}(hhh]jM)}(hallocation mask to useh]hallocation mask to use}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hK5hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hK5hjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK7hjOubjM)}(hX;Initializes **ref**. **ref** starts out in percpu mode with a refcount of 1 unless **flags** contains PERCPU_REF_INIT_ATOMIC or PERCPU_REF_INIT_DEAD. These flags change the start state to atomic with the latter setting the initial refcount to 0. See the definitions of PERCPU_REF_INIT_* flags for flag behaviors.h](h Initializes }(hjphhhNhNubj)}(h**ref**h]href}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh. }(hjphhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh7 starts out in percpu mode with a refcount of 1 unless }(hjphhhNhNubj)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh contains PERCPU_REF_INIT_ATOMIC or PERCPU_REF_INIT_DEAD. These flags change the start state to atomic with the latter setting the initial refcount to 0. See the definitions of PERCPU_REF_INIT_* flags for flag behaviors.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK6hjOubjM)}(hsNote that **release** must not sleep - it may potentially be called from RCU callback context by percpu_ref_kill().h](h Note that }(hjhhhNhNubj)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh^ must not sleep - it may potentially be called from RCU callback context by percpu_ref_kill().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK;hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_exit (C function)c.percpu_ref_exithNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void percpu_ref_exit (struct percpu_ref *ref)h]h)}(h,void percpu_ref_exit(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chKyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKyubh)}(hpercpu_ref_exith]j)}(hpercpu_ref_exith]hpercpu_ref_exit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKyubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_exitasbuh1hhj/ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKyubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKyubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKyhjhhubj4)}(hhh]jM)}(hundo percpu_ref_init()h]hundo percpu_ref_init()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chKyhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to exit **Description** This function exits **ref**. The caller is responsible for ensuring that **ref** is no longer in active use. The usual places to invoke this function from are the **ref->release\(\)** callback or in init failure path where percpu_ref_init() succeeded but other parts of the initialization of the embedding object failed.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:94: ./lib/percpu-refcount.chK}hjubj)}(hhh]j)}(h.``struct percpu_ref *ref`` percpu_ref to exit h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chKzhjubj)}(hhh]jM)}(hpercpu_ref to exith]hpercpu_ref to exit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKzhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKzhjubah}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK|hjubjM)}(hXBThis function exits **ref**. The caller is responsible for ensuring that **ref** is no longer in active use. The usual places to invoke this function from are the **ref->release\(\)** callback or in init failure path where percpu_ref_init() succeeded but other parts of the initialization of the embedding object failed.h](hThis function exits }(hjHhhhNhNubj)}(h**ref**h]href}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh/. The caller is responsible for ensuring that }(hjHhhhNhNubj)}(h**ref**h]href}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhT is no longer in active use. The usual places to invoke this function from are the }(hjHhhhNhNubj)}(h**ref->release\(\)**h]href->release()}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh callback or in init failure path where percpu_ref_init() succeeded but other parts of the initialization of the embedding object failed.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chK{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(percpu_ref_switch_to_atomic (C function)c.percpu_ref_switch_to_atomichNtauh1hhjhhhNhNubh)}(hhh](h)}(h\void percpu_ref_switch_to_atomic (struct percpu_ref *ref, percpu_ref_func_t *confirm_switch)h]h)}(h[void percpu_ref_switch_to_atomic(struct percpu_ref *ref, percpu_ref_func_t *confirm_switch)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hpercpu_ref_switch_to_atomich]j)}(hpercpu_ref_switch_to_atomich]hpercpu_ref_switch_to_atomic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h;(struct percpu_ref *ref, percpu_ref_func_t *confirm_switch)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_switch_to_atomicasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h!percpu_ref_func_t *confirm_switchh](h)}(hhh]j)}(hpercpu_ref_func_th]hpercpu_ref_func_t}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j$c.percpu_ref_switch_to_atomicasbuh1hhjXubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hconfirm_switchh]hconfirm_switch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(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"switch a percpu_ref to atomic modeh]h"switch a percpu_ref to atomic mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to switch to atomic mode ``percpu_ref_func_t *confirm_switch`` optional confirmation callback **Description** There's no reason to use this function for the usual reference counting. Use percpu_ref_kill() or percpu_ref_kill_and_confirm(). Schedule switching of **ref** to atomic mode. All its percpu counts will be collected to the main atomic counter. On completion, when all CPUs are guaraneed to be in atomic mode, **confirm_switch**, which may not block, is invoked. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. Note that **ref** will stay in atomic mode across kill/reinit cycles until percpu_ref_switch_to_percpu() is called. This function may block if **ref** is in the process of switching to atomic mode. If the caller ensures that **ref** is not in the process of switching to atomic mode, this function can 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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM#hjubj)}(hhh](j)}(h?``struct percpu_ref *ref`` percpu_ref to switch to atomic mode h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM hjubj)}(hhh]jM)}(h#percpu_ref to switch to atomic modeh]h#percpu_ref to switch to atomic mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hE``percpu_ref_func_t *confirm_switch`` optional confirmation callback h](j)}(h%``percpu_ref_func_t *confirm_switch``h]jS)}(hj<h]h!percpu_ref_func_t *confirm_switch}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM!hj6ubj)}(hhh]jM)}(hoptional confirmation callbackh]hoptional confirmation callback}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhM!hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM!hjubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM#hjubjM)}(hThere's no reason to use this function for the usual reference counting. Use percpu_ref_kill() or percpu_ref_kill_and_confirm().h]hThere’s no reason to use this function for the usual reference counting. Use percpu_ref_kill() or percpu_ref_kill_and_confirm().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM"hjubjM)}(hXSchedule switching of **ref** to atomic mode. All its percpu counts will be collected to the main atomic counter. On completion, when all CPUs are guaraneed to be in atomic mode, **confirm_switch**, which may not block, is invoked. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. Note that **ref** will stay in atomic mode across kill/reinit cycles until percpu_ref_switch_to_percpu() is called.h](hSchedule switching of }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to atomic mode. All its percpu counts will be collected to the main atomic counter. On completion, when all CPUs are guaraneed to be in atomic mode, }(hjhhhNhNubj)}(h**confirm_switch**h]hconfirm_switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, which may not block, is invoked. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. Note that }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhb will stay in atomic mode across kill/reinit cycles until percpu_ref_switch_to_percpu() is called.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM%hjubjM)}(hThis function may block if **ref** is in the process of switching to atomic mode. If the caller ensures that **ref** is not in the process of switching to atomic mode, this function can be called from any context.h](hThis function may block if }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL is in the process of switching to atomic mode. If the caller ensures that }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubha is not in the process of switching to atomic mode, this function can be called from any context.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-percpu_ref_switch_to_atomic_sync (C function)"c.percpu_ref_switch_to_atomic_synchNtauh1hhjhhhNhNubh)}(hhh](h)}(h>void percpu_ref_switch_to_atomic_sync (struct percpu_ref *ref)h]h)}(h=void percpu_ref_switch_to_atomic_sync(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMAubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjBhMAubh)}(h percpu_ref_switch_to_atomic_synch]j)}(h percpu_ref_switch_to_atomic_synch]h percpu_ref_switch_to_atomic_sync}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjBhMAubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjWsb"c.percpu_ref_switch_to_atomic_syncasbuh1hhjmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hrefh]href}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjBhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjBhMAubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMAhj)hhubj4)}(hhh]jM)}(h"switch a percpu_ref to atomic modeh]h"switch a percpu_ref to atomic mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMAhjhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjBhMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct percpu_ref *ref`` percpu_ref to switch to atomic mode **Description** Schedule switching the ref to atomic mode, and wait for the switch to complete. Caller must ensure that no other thread will switch back to percpu mode.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:94: ./lib/percpu-refcount.chMEhjubj)}(hhh]j)}(h?``struct percpu_ref *ref`` percpu_ref to switch to atomic mode h](j)}(h``struct percpu_ref *ref``h]jS)}(hj5h]hstruct percpu_ref *ref}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMBhj/ubj)}(hhh]jM)}(h#percpu_ref to switch to atomic modeh]h#percpu_ref to switch to atomic mode}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMBhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMBhj,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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMDhjubjM)}(hSchedule switching the ref to atomic mode, and wait for the switch to complete. Caller must ensure that no other thread will switch back to percpu mode.h]hSchedule switching the ref to atomic mode, and wait for the switch to complete. Caller must ensure that no other thread will switch back to percpu mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(percpu_ref_switch_to_percpu (C function)c.percpu_ref_switch_to_percpuhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9void percpu_ref_switch_to_percpu (struct percpu_ref *ref)h]h)}(h8void percpu_ref_switch_to_percpu(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMPubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMPubh)}(hpercpu_ref_switch_to_percpuh]j)}(hpercpu_ref_switch_to_percpuh]hpercpu_ref_switch_to_percpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMPubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_switch_to_percpuasbuh1hhjubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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"switch a percpu_ref to percpu modeh]h"switch a percpu_ref to percpu mode}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMPhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMPubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX/**Parameters** ``struct percpu_ref *ref`` percpu_ref to switch to percpu mode **Description** There's no reason to use this function for the usual reference counting. To re-use an expired ref, use percpu_ref_reinit(). Switch **ref** to percpu mode. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. This function reverses the sticky atomic state set by PERCPU_REF_INIT_ATOMIC or percpu_ref_switch_to_atomic(). If **ref** is dying or dead, the actual switching takes place on the following percpu_ref_reinit(). This function may block if **ref** is in the process of switching to atomic mode. If the caller ensures that **ref** is not in the process of switching to atomic mode, this function can 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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMThjubj)}(hhh]j)}(h?``struct percpu_ref *ref`` percpu_ref to switch to percpu mode h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMQhjubj)}(hhh]jM)}(h#percpu_ref to switch to percpu modeh]h#percpu_ref to switch to percpu mode}(hjhhhNhNubah}(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)}(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:94: ./lib/percpu-refcount.chMShjubjM)}(h{There's no reason to use this function for the usual reference counting. To re-use an expired ref, use percpu_ref_reinit().h]h}There’s no reason to use this function for the usual reference counting. To re-use an expired ref, use percpu_ref_reinit().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMRhjubjM)}(hXwSwitch **ref** to percpu mode. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. This function reverses the sticky atomic state set by PERCPU_REF_INIT_ATOMIC or percpu_ref_switch_to_atomic(). If **ref** is dying or dead, the actual switching takes place on the following percpu_ref_reinit().h](hSwitch }(hj hhhNhNubj)}(h**ref**h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhX  to percpu mode. This function may be invoked concurrently with all the get/put operations and can safely be mixed with kill and reinit operations. This function reverses the sticky atomic state set by PERCPU_REF_INIT_ATOMIC or percpu_ref_switch_to_atomic(). If }(hj hhhNhNubj)}(h**ref**h]href}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhY is dying or dead, the actual switching takes place on the following percpu_ref_reinit().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMUhjubjM)}(hThis function may block if **ref** is in the process of switching to atomic mode. If the caller ensures that **ref** is not in the process of switching to atomic mode, this function can be called from any context.h](hThis function may block if }(hjI hhhNhNubj)}(h**ref**h]href}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI ubhL is in the process of switching to atomic mode. If the caller ensures that }(hjI hhhNhNubj)}(h**ref**h]href}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI ubha is not in the process of switching to atomic mode, this function can be called from any context.}(hjI hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(percpu_ref_kill_and_confirm (C function)c.percpu_ref_kill_and_confirmhNtauh1hhjhhhNhNubh)}(hhh](h)}(hZvoid percpu_ref_kill_and_confirm (struct percpu_ref *ref, percpu_ref_func_t *confirm_kill)h]h)}(hYvoid percpu_ref_kill_and_confirm(struct percpu_ref *ref, percpu_ref_func_t *confirm_kill)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMoubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMoubh)}(hpercpu_ref_kill_and_confirmh]j)}(hpercpu_ref_kill_and_confirmh]hpercpu_ref_kill_and_confirm}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMoubj4)}(h9(struct percpu_ref *ref, percpu_ref_func_t *confirm_kill)h](j:)}(hstruct percpu_ref *refh](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 percpu_refh]h percpu_ref}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sbc.percpu_ref_kill_and_confirmasbuh1hhj 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)}(hrefh]href}(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hpercpu_ref_func_t *confirm_killh](h)}(hhh]j)}(hpercpu_ref_func_th]hpercpu_ref_func_t}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjP modnameN classnameNjwjz)}j}]j c.percpu_ref_kill_and_confirmasbuh1hhjG ubjQ)}(h h]h }(hjl hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjG ubj)}(hjh]h*}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubj)}(h confirm_killh]h confirm_kill}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMoubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMohj hhubj4)}(hhh]jM)}(h.drop the initial ref and schedule confirmationh]h.drop the initial ref and schedule confirmation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMohj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` percpu_ref to kill ``percpu_ref_func_t *confirm_kill`` optional confirmation callback **Description** Equivalent to percpu_ref_kill() but also schedules kill confirmation if **confirm_kill** is not NULL. **confirm_kill**, which may not block, will be called after **ref** is seen as dead from all CPUs at which point all further invocations of percpu_ref_tryget_live() will fail. See percpu_ref_tryget_live() for details. This function normally doesn't block and can be called from any context but it may block if **confirm_kill** is specified and **ref** is in the process of switching to atomic mode by percpu_ref_switch_to_atomic(). There are no implied RCU grace periods between kill and release.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:94: ./lib/percpu-refcount.chMshj ubj)}(hhh](j)}(h.``struct percpu_ref *ref`` percpu_ref to kill h](j)}(h``struct percpu_ref *ref``h]jS)}(hj h]hstruct percpu_ref *ref}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMphj ubj)}(hhh]jM)}(hpercpu_ref to killh]hpercpu_ref to kill}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMphj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMphj ubj)}(hC``percpu_ref_func_t *confirm_kill`` optional confirmation callback h](j)}(h#``percpu_ref_func_t *confirm_kill``h]jS)}(hj+ h]hpercpu_ref_func_t *confirm_kill}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj) ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMqhj% ubj)}(hhh]jM)}(hoptional confirmation callbackh]hoptional confirmation callback}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@ hMqhjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hMqhj 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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMshj ubjM)}(hXAEquivalent to percpu_ref_kill() but also schedules kill confirmation if **confirm_kill** is not NULL. **confirm_kill**, which may not block, will be called after **ref** is seen as dead from all CPUs at which point all further invocations of percpu_ref_tryget_live() will fail. See percpu_ref_tryget_live() for details.h](hHEquivalent to percpu_ref_kill() but also schedules kill confirmation if }(hj| hhhNhNubj)}(h**confirm_kill**h]h confirm_kill}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubh is not NULL. }(hj| hhhNhNubj)}(h**confirm_kill**h]h confirm_kill}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubh,, which may not block, will be called after }(hj| hhhNhNubj)}(h**ref**h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubh is seen as dead from all CPUs at which point all further invocations of percpu_ref_tryget_live() will fail. See percpu_ref_tryget_live() for details.}(hj| hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMrhj ubjM)}(hThis function normally doesn't block and can be called from any context but it may block if **confirm_kill** is specified and **ref** is in the process of switching to atomic mode by percpu_ref_switch_to_atomic().h](h^This function normally doesn’t block and can be called from any context but it may block if }(hj hhhNhNubj)}(h**confirm_kill**h]h confirm_kill}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is specified and }(hj hhhNhNubj)}(h**ref**h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhP is in the process of switching to atomic mode by percpu_ref_switch_to_atomic().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMxhj ubjM)}(h@There are no implied RCU grace periods between kill and release.h]h@There are no implied RCU grace periods between kill and release.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chM|hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_is_zero (C function)c.percpu_ref_is_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h0bool percpu_ref_is_zero (struct percpu_ref *ref)h]h)}(h/bool percpu_ref_is_zero(struct percpu_ref *ref)h](j)}(hjh]hbool}(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMubjQ)}(h h]h }(hj1 hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj0 hMubh)}(hpercpu_ref_is_zeroh]j)}(hpercpu_ref_is_zeroh]hpercpu_ref_is_zero}(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj0 hMubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](j?)}(hjBh]hstruct}(hj_ hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[ ubjQ)}(h h]h }(hjl hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ ubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjE sbc.percpu_ref_is_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)}(hrefh]href}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjW ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj0 hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj0 hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0 hMhj hhubj4)}(hhh]jM)}(h+test whether a percpu refcount reached zeroh]h+test whether a percpu refcount reached zero}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj0 hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct percpu_ref *ref`` percpu_ref to test **Description** Returns ``true`` if **ref** reached zero. This function is safe to call as long as **ref** is between init and exit.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:94: ./lib/percpu-refcount.chMhj ubj)}(hhh]j)}(h.``struct percpu_ref *ref`` percpu_ref to test h](j)}(h``struct percpu_ref *ref``h]jS)}(hj# h]hstruct percpu_ref *ref}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj! ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj ubj)}(hhh]jM)}(hpercpu_ref to testh]hpercpu_ref to test}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8 hMhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj8 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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj ubjM)}(h)Returns ``true`` if **ref** reached zero.h](hReturns }(hjt hhhNhNubjS)}(h``true``h]htrue}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt ubh if }(hjt hhhNhNubj)}(h**ref**h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubh reached zero.}(hjt hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj ubjM)}(hJThis function is safe to call as long as **ref** is between init and exit.h](h)This function is safe to call as long as }(hj hhhNhNubj)}(h**ref**h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is between init and exit.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpercpu_ref_reinit (C function)c.percpu_ref_reinithNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void percpu_ref_reinit (struct percpu_ref *ref)h]h)}(h.void percpu_ref_reinit(struct percpu_ref *ref)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hpercpu_ref_reinith]j)}(hpercpu_ref_reinith]hpercpu_ref_reinit}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h(struct percpu_ref *ref)h]j:)}(hstruct percpu_ref *refh](j?)}(hjBh]hstruct}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsj sbc.percpu_ref_reinitasbuh1hhj!ubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hrefh]href}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(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]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhj hhubj4)}(hhh]jM)}(hre-initialize a percpu refcounth]hre-initialize a percpu refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` perpcu_ref to re-initialize **Description** Re-initialize **ref** so that it's in the same state as when it finished percpu_ref_init() ignoring ``PERCPU_REF_INIT_DEAD``. **ref** must have been initialized successfully and reached 0 but not exited. Note that percpu_ref_tryget[_live]() are safe to perform on **ref** while this function is in progress.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:94: ./lib/percpu-refcount.chMhjubj)}(hhh]j)}(h7``struct percpu_ref *ref`` perpcu_ref to re-initialize h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubj)}(hhh]jM)}(hperpcu_ref to re-initializeh]hperpcu_ref to re-initialize}(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:94: ./lib/percpu-refcount.chMhjubjM)}(hRe-initialize **ref** so that it's in the same state as when it finished percpu_ref_init() ignoring ``PERCPU_REF_INIT_DEAD``. **ref** must have been initialized successfully and reached 0 but not exited.h](hRe-initialize }(hj:hhhNhNubj)}(h**ref**h]href}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubhQ so that it’s in the same state as when it finished percpu_ref_init() ignoring }(hj:hhhNhNubjS)}(h``PERCPU_REF_INIT_DEAD``h]hPERCPU_REF_INIT_DEAD}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubh. }(hj:hhhNhNubj)}(h**ref**h]href}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubhF must have been initialized successfully and reached 0 but not exited.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubjM)}(hgNote that percpu_ref_tryget[_live]() are safe to perform on **ref** while this function is in progress.h](hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h percpu_refh]h percpu_ref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.percpu_ref_resurrectasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrefh]href}(hjVhhhNhNubah}(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*modify a percpu refcount from dead to liveh]h*modify a percpu refcount from dead to live}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhj}hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct percpu_ref *ref`` perpcu_ref to resurrect **Description** Modify **ref** so that it's in the same state as before percpu_ref_kill() was called. **ref** must be dead but must not yet have exited. If **ref->release\(\)** frees **ref** then the caller is responsible for guaranteeing that **ref->release\(\)** does not get called while this function is in progress. Note that percpu_ref_tryget[_live]() are safe to perform on **ref** while this function is in progress.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:94: ./lib/percpu-refcount.chMhjubj)}(hhh]j)}(h3``struct percpu_ref *ref`` perpcu_ref to resurrect h](j)}(h``struct percpu_ref *ref``h]jS)}(hjh]hstruct percpu_ref *ref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubj)}(hhh]jM)}(hperpcu_ref to resurrecth]hperpcu_ref to resurrect}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubjM)}(hModify **ref** so that it's in the same state as before percpu_ref_kill() was called. **ref** must be dead but must not yet have exited.h](hModify }(hjhhhNhNubj)}(h**ref**h]href}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ so that it’s in the same state as before percpu_ref_kill() was called. }(hjhhhNhNubj)}(h**ref**h]href}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh+ must be dead but must not yet have exited.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubjM)}(hIf **ref->release\(\)** frees **ref** then the caller is responsible for guaranteeing that **ref->release\(\)** does not get called while this function is in progress.h](hIf }(hjEhhhNhNubj)}(h**ref->release\(\)**h]href->release()}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh frees }(hjEhhhNhNubj)}(h**ref**h]href}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh6 then the caller is responsible for guaranteeing that }(hjEhhhNhNubj)}(h**ref->release\(\)**h]href->release()}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh8 does not get called while this function is in progress.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:94: ./lib/percpu-refcount.chMhjubjM)}(hgNote that percpu_ref_tryget[_live]() are safe to perform on **ref** while this function is in progress.h](hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(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)}jsjsb c.atomic_readasbuh1hhjubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvh]hv}(hjzhhhNhNubah}(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!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:99: ./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:99: ./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:99: ./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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh with relaxed ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_read_acquireasbuh1hhjubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjUhhhNhNubah}(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}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK%hj{hhubah}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhK(hjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK)hjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhK+hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(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:99: ./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:99: ./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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(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}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK6hjnhhubah}(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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK8hjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhK:hjubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to }(hj<hhhNhNubj)}(h**i**h]hi}(hjVhhhNhNubah}(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:99: ./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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK;hjubjM)}(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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_set_releaseasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint ih](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]hi}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(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:99: ./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:99: ./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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKJhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hKJhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKJhjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKLhjubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh to }(hjhhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh with release ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK[ubh)}(h atomic_addh]j)}(h atomic_addh]h atomic_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK[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}(hjJhhhNhNubah}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_addasbuh1hhj^ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(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 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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK\hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK\hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjCh]h atomic_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhK]hj=ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhK]hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhK]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKmubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj=hKmubh)}(hatomic_add_returnh]j)}(hatomic_add_returnh]hatomic_add_return}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj=hKmubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubj:)}(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)}jsjRsbc.atomic_add_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubeh}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj=hKmubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhj=hKmubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hKmhj$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:99: ./include/linux/atomic/atomic-instrumented.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj=hKmubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKqhj#ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjHh]hint i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKnhjBubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hKnhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKnhj?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:99: ./include/linux/atomic/atomic-instrumented.hhKohj{ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKohjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(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:99: ./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:99: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKrhj#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:99: ./include/linux/atomic/atomic-instrumented.hhKthj#ubjM)}(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:99: ./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&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhKubh)}(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&]jjuh1hhj{hhhjhKubj4)}(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_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj{hhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjwhhhjhKubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjthhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjThhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjojHjojIjJjKuh1hhhhjhNhNubj)}(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)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubj)}(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:99: ./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:99: ./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&]uh1jhjsubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubjM)}(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}(hjN 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:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubjM)}(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.}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubjM)}(h **Return**h]j)}(hjx h]hReturn}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKhjsubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubh)}(hatomic_add_return_releaseh]j)}(hatomic_add_return_releaseh]hatomic_add_return_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hKubj4)}(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}(hjC!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjE!modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_add_return_releaseasbuh1hhj'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:99: ./include/linux/atomic/atomic-instrumented.hhKhjc&ubjM)}(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.}(hjW'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjc&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:99: ./include/linux/atomic/atomic-instrumented.hhKhjc&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:99: ./include/linux/atomic/atomic-instrumented.hhKhjc&ubeh}(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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj'hKubh)}(hatomic_fetch_add_acquireh]j)}(hatomic_fetch_add_acquireh]hatomic_fetch_add_acquire}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj'hKubj4)}(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}(hj3(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5(modnameN classnameNjwjz)}j}]j)}jsj'sbc.atomic_fetch_add_acquireasbuh1hhj,(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)}(hj|h]hv}(hjn(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 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:99: ./include/linux/atomic/atomic-instrumented.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj'hKubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKhj(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj(ubj)}(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&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj(ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]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:99: ./include/linux/atomic/atomic-instrumented.hhKhj )ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhKhj(ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire 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 acquire ordering.}(hjb)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj(ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj(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:99: ./include/linux/atomic/atomic-instrumented.hhKhj(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:99: ./include/linux/atomic/atomic-instrumented.hhKhj(ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj *hhhj*hKubh)}(hatomic_fetch_add_releaseh]j)}(hatomic_fetch_add_releaseh]hatomic_fetch_add_release}(hj0*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj *hhhj*hKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjL*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH*ubjQ)}(h h]h }(hjZ*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH*ubj)}(hjh]hi}(hjh*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD*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)}jsj2*sbc.atomic_fetch_add_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)}(hj|h]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD*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 atomic add with release orderingh]h atomic add with release ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhj*hKubeh}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhKhj+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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj"+ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjA+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$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hja+h]h atomic_t *v}(hjc+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_+ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj[+ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjz+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjv+hKhjw+ubah}(h]h ]h"]h$]h&]uh1jhj[+ubeh}(h]h ]h"]h$]h&]uh1jhjv+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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj+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:99: ./include/linux/atomic/atomic-instrumented.hhKhj+ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj+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:99: ./include/linux/atomic/atomic-instrumented.hhKhj+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:99: ./include/linux/atomic/atomic-instrumented.hhKhj+ubeh}(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&]uh1jhj[,hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjn,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[,hhhjm,hKubh)}(hatomic_fetch_add_relaxedh]j)}(hatomic_fetch_add_relaxedh]hatomic_fetch_add_relaxed}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[,hhhjm,hKubj4)}(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_fetch_add_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)}(hj|h]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubeh}(h]h ]h"]h$]h&]jjuh1j3hj[,hhhjm,hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjW,hhhjm,hKubah}(h]jR,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjm,hKhjT,hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj7-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhj4-hhubah}(h]h ]h"]h$]h&]uh1j3hjT,hhhjm,hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjO-jHjO-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_fetch_add_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjY-h]h Parameters}(hj[-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjx-h]hint i}(hjz-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjv-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjr-ubj)}(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&]uh1jhjr-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjo-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:99: ./include/linux/atomic/atomic-instrumented.hhKhj-ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjo-ubeh}(h]h ]h"]h$]h&]uh1jhjS-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:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-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:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-ubjM)}(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.}(hjG.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-ubjM)}(h **Return**h]j)}(hjX.h]hReturn}(hjZ.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-ubjM)}(hThe original value of **v**.h](hThe original value of }(hjn.hhhNhNubj)}(h**v**h]hv}(hjv.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn.ubh.}(hjn.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhKhjS-ubeh}(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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj.hMubh)}(h atomic_subh]j)}(h atomic_subh]h atomic_sub}(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}(hj#/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj /ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%/modnameN classnameNjwjz)}j}]j)}jsj.sb c.atomic_subasbuh1hhj/ubjQ)}(h h]h }(hjC/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjQ/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hj|h]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 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:99: ./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 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:99: ./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:99: ./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)}(hj0h]h atomic_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubjM)}(h**Description**h]j)}(hj<0h]h Description}(hj>0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj/ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjR0hhhNhNubj)}(h**v**h]hv}(hjZ0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR0ubh to (}(hjR0hhhNhNubj)}(h**v**h]hv}(hjl0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR0ubh - }(hjR0hhhNhNubj)}(h**i**h]hi}(hj~0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR0ubh) with relaxed ordering.}(hjR0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj/ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj/ubjM)}(hNothing.h]hNothing.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubh)}(hatomic_sub_returnh]j)}(hatomic_sub_returnh]hatomic_sub_return}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj*1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&1ubjQ)}(h h]h }(hj81hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&1ubj)}(hjh]hi}(hjF1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"1ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hja1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjc1modnameN classnameNjwjz)}j}]j)}jsj1sbc.atomic_sub_returnasbuh1hhjZ1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ1ubj)}(hj|h]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"1ubeh}(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 subtract with full orderingh]h"atomic subtract with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(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)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj2h]hint i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj1ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj?2h]h atomic_t *v}(hjA2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj92ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjX2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjT2hMhjU2ubah}(h]h ]h"]h$]h&]uh1jhj92ubeh}(h]h ]h"]h$]h&]uh1jhjT2hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjz2h]h Description}(hj|2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full 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 - }(hj2hhhNhNubj)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with full ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj1ubeh}(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}(hj=3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj93hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM&ubjQ)}(h h]h }(hjL3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj93hhhjK3hM&ubh)}(hatomic_sub_return_acquireh]j)}(hatomic_sub_return_acquireh]hatomic_sub_return_acquire}(hj^3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj93hhhjK3hM&ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjz3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv3ubj)}(hjh]hi}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjr3ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsj`3sbc.atomic_sub_return_acquireasbuh1hhj3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hj|h]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjr3ubeh}(h]h ]h"]h$]h&]jjuh1j3hj93hhhjK3hM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj53hhhjK3hM&ubah}(h]j03ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjK3hM&hj23hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM&hj4hhubah}(h]h ]h"]h$]h&]uh1j3hj23hhhjK3hM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-4jHj-4jIjJjKuh1hhhhjhNhNubj)}(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)}(hj74h]h Parameters}(hj94hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj54ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM*hj14ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjV4h]hint i}(hjX4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjT4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM'hjP4ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjo4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjk4hM'hjl4ubah}(h]h ]h"]h$]h&]uh1jhjP4ubeh}(h]h ]h"]h$]h&]uh1jhjk4hM'hjM4ubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM(hj4ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hM(hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM(hjM4ubeh}(h]h ]h"]h$]h&]uh1jhj14ubjM)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM*hj14ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire 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}(hj 5hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM)hj14ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.}(hj%5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+hj14ubjM)}(h **Return**h]j)}(hj65h]hReturn}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj45ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM-hj14ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjL5hhhNhNubj)}(h**v**h]hv}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL5ubh.}(hjL5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM.hj14ubeh}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM8ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhj5hM8ubh)}(hatomic_sub_return_releaseh]j)}(hatomic_sub_return_releaseh]hatomic_sub_return_release}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhj5hM8ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(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:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsj5sbc.atomic_sub_return_releaseasbuh1hhj5ubjQ)}(h h]h }(hj!6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj/6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hj|h]hv}(hj<6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhj5hM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhj5hM8ubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hM8hj5hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hje6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM8hjb6hhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhj5hM8ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}6jHj}6jIjJjKuh1hhhhjhNhNubj)}(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)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM<hj6ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj6h]hint i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM9hj6ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM9hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM9hj6ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj6h]h atomic_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM:hj6ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM:hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM:hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM<hj6ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj07hhhNhNubj)}(h**v**h]hv}(hj87hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj07ubh to (}(hj07hhhNhNubj)}(h**v**h]hv}(hjJ7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj07ubh - }(hj07hhhNhNubj)}(h**i**h]hi}(hj\7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj07ubh) with release ordering.}(hj07hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM;hj6ubjM)}(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.}(hju7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM=hj6ubjM)}(h **Return**h]j)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM?hj6ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM@hj6ubeh}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hMKubh)}(hatomic_sub_return_relaxedh]j)}(hatomic_sub_return_relaxedh]hatomic_sub_return_relaxed}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hMKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjQ)}(h h]h }(hj(8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]hi}(hj68hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjQ8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjS8modnameN classnameNjwjz)}j}]j)}jsj8sbc.atomic_sub_return_relaxedasbuh1hhjJ8ubjQ)}(h h]h }(hjq8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ8ubj)}(hj|h]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhj7hMKubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMKhj7hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhj8hhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhj7hMKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMOhj8ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj8h]hint i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMLhj8ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 9hMLhj 9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj 9hMLhj8ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj/9h]h atomic_t *v}(hj19hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMMhj)9ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjH9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjD9hMMhjE9ubah}(h]h ]h"]h$]h&]uh1jhj)9ubeh}(h]h ]h"]h$]h&]uh1jhjD9hMMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hjj9h]h Description}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMOhj8ubjM)}(hBAtomically updates **v** to (**v** - **i**) 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 - }(hj9hhhNhNubj)}(h**i**h]hi}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh) with relaxed ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMNhj8ubjM)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMPhj8ubjM)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMRhj8ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMShj8ubeh}(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}(hj-:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj):hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM]ubjQ)}(h h]h }(hj<:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj):hhhj;:hM]ubh)}(hatomic_fetch_subh]j)}(hatomic_fetch_subh]hatomic_fetch_sub}(hjN:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj):hhhj;:hM]ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf:ubjQ)}(h h]h }(hjx:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf:ubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb: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)}jsjP:sbc.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)}(hj|h]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb: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 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:99: ./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** ``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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMahj!;ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjF;h]hint i}(hjH;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjD;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM_hjy;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&]uh1jhjy;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:99: ./include/linux/atomic/atomic-instrumented.hhMahj!;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:99: ./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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMbhj!;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:99: ./include/linux/atomic/atomic-instrumented.hhMdhj!;ubjM)}(hThe original value of **v**.h](hThe original value of }(hj<<hhhNhNubj)}(h**v**h]hv}(hjD<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:99: ./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}(hj}<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMpubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjy<hhhj<hMpubh)}(hatomic_fetch_sub_acquireh]j)}(hatomic_fetch_sub_acquireh]hatomic_fetch_sub_acquire}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjy<hhhj<hMpubj4)}(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_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)}(hj|h]hv}(hj,=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjy<hhhj<hMpubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hju<hhhj<hMpubah}(h]jp<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<hMphjr<hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjU=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMphjR=hhubah}(h]h ]h"]h$]h&]uh1j3hjr<hhhj<hMpubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjm=jHjm=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. 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)}(hjw=h]h Parameters}(hjy=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMthjq=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:99: ./include/linux/atomic/atomic-instrumented.hhMqhj=ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMqhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMqhj=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:99: ./include/linux/atomic/atomic-instrumented.hhMrhj=ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMrhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMrhj=ubeh}(h]h ]h"]h$]h&]uh1jhjq=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:99: ./include/linux/atomic/atomic-instrumented.hhMthjq=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}(hjL>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:99: ./include/linux/atomic/atomic-instrumented.hhMshjq=ubjM)}(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.}(hje>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMuhjq=ubjM)}(h **Return**h]j)}(hjv>h]hReturn}(hjx>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMwhjq=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:99: ./include/linux/atomic/atomic-instrumented.hhMxhjq=ubeh}(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}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj>hMubh)}(hatomic_fetch_sub_releaseh]j)}(hatomic_fetch_sub_releaseh]hatomic_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}(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}(hjA?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjC?modnameN classnameNjwjz)}j}]j)}jsj>sbc.atomic_fetch_sub_releaseasbuh1hhj:?ubjQ)}(h h]h }(hja?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:?ubj)}(hjh]h*}(hjo?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:?ubj)}(hj|h]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 subtract with release orderingh]h%atomic subtract with release ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj8@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4@hMhj5@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj4@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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjp@hhhNhNubj)}(h**v**h]hv}(hjx@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp@ubh to (}(hjp@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp@ubh - }(hjp@hhhNhNubj)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp@ubh) with release ordering.}(hjp@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(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.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj?ubeh}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj,AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhj+AhMubh)}(hatomic_fetch_sub_relaxedh]j)}(hatomic_fetch_sub_relaxedh]hatomic_fetch_sub_relaxed}(hj>AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Aubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhj+AhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjZAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVAubjQ)}(h h]h }(hjhAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVAubj)}(hjh]hi}(hjvAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRAubj:)}(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@Asbc.atomic_fetch_sub_relaxedasbuh1hhjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hj|h]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRAubeh}(h]h ]h"]h$]h&]jjuh1j3hjAhhhj+AhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhj+AhMubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+AhMhjAhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhj+AhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj BjHj BjIjJjKuh1hhhhjhNhNubj)}(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)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj6Bh]hint i}(hj8BhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4Bubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0Bubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjOBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKBhMhjLBubah}(h]h ]h"]h$]h&]uh1jhj0Bubeh}(h]h ]h"]h$]h&]uh1jhjKBhMhj-Bubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjoBh]h atomic_t *v}(hjqBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjiBubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjiBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj-Bubeh}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh to (}(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh - }(hjBhhhNhNubj)}(h**i**h]hi}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh) with relaxed ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(hThe original value of **v**.h](hThe original value of }(hj,ChhhNhNubj)}(h**v**h]hv}(hj4ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Cubh.}(hj,ChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(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}(hjmChhhNhNubah}(h]h ]jah"] h$]h&]uh1jhjiChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj|ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiChhhj{ChMubh)}(h atomic_inch]j)}(h atomic_inch]h atomic_inc}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhjiChhhj{ChMubj4)}(h (atomic_t *v)h]j:)}(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)}jsjCsb c.atomic_incasbuh1hhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hj|h]hv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubah}(h]h ]h"]h$]h&]jjuh1j3hjiChhhj{ChMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjeChhhj{ChMubah}(h]j`Cah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{ChMhjbChhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hjbChhhj{ChMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)DjHj)DjIjJjKuh1hhhhjhNhNubj)}(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)}(hj3Dh]h Parameters}(hj5DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Dubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-Dubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjRDh]h atomic_t *v}(hjTDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjLDubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjkDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjgDhMhjhDubah}(h]h ]h"]h$]h&]uh1jhjLDubeh}(h]h ]h"]h$]h&]uh1jhjgDhMhjIDubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-DubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with relaxed ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-DubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-DubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj-DubjM)}(hNothing.h]hNothing.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-Dubeh}(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}(hj,EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Ehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj;EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(Ehhhj:EhMubh)}(hatomic_inc_returnh]j)}(hatomic_inc_returnh]hatomic_inc_return}(hjMEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(Ehhhj:EhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjlEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnEmodnameN classnameNjwjz)}j}]j)}jsjOEsbc.atomic_inc_returnasbuh1hhjeEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeEubj)}(hj|h]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaEubah}(h]h ]h"]h$]h&]jjuh1j3hj(Ehhhj:EhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$Ehhhj:EhMubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:EhMhj!Ehhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hj!Ehhhj:EhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjFh]h atomic_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj Fubj)}(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&]uh1jhj Fubeh}(h]h ]h"]h$]h&]uh1jhj&FhMhjFubah}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjLFh]h Description}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjbFhhhNhNubj)}(h**v**h]hv}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbFubh to (}(hjbFhhhNhNubj)}(h**v**h]hv}(hj|FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbFubh + 1) with full ordering.}(hjbFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubeh}(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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhj GhMubh)}(hatomic_inc_return_acquireh]j)}(hatomic_inc_return_acquireh]hatomic_inc_return_acquire}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhj GhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj=GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?GmodnameN classnameNjwjz)}j}]j)}jsj Gsbc.atomic_inc_return_acquireasbuh1hhj6GubjQ)}(h h]h }(hj]GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6Gubj)}(hjh]h*}(hjkGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Gubj)}(hj|h]hv}(hjxGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Gubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2Gubah}(h]h ]h"]h$]h&]jjuh1j3hjFhhhj GhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj GhMubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj GhMhjFhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhj GhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjGh]h atomic_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj3HhhhNhNubj)}(h**v**h]hv}(hj;HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Hubh to (}(hj3HhhhNhNubj)}(h**v**h]hv}(hjMHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Hubh + 1) with acquire ordering.}(hj3HhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubjM)}(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.}(hjfHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubjM)}(h **Return**h]j)}(hjwHh]hReturn}(hjyHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjHhMubh)}(hatomic_inc_return_releaseh]j)}(hatomic_inc_return_releaseh]hatomic_inc_return_release}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjHhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsjHsbc.atomic_inc_return_releaseasbuh1hhjIubjQ)}(h h]h }(hj.IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hjAtomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjJhhhNhNubj)}(h**v**h]hv}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh to (}(hjJhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh + 1) with release ordering.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(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.}(hj7JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(h **Return**h]j)}(hjHJh]hReturn}(hjJJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFJubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjIubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj^JhhhNhNubj)}(h**v**h]hv}(hjfJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Jubh.}(hj^JhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjIubeh}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjJhMubh)}(hatomic_inc_return_relaxedh]j)}(hatomic_inc_return_relaxedh]hatomic_inc_return_relaxed}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]j)}jsjJsbc.atomic_inc_return_relaxedasbuh1hhjJubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hj|h]hv}(hjKhhhNhNubah}(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 relaxed orderingh]h&atomic increment with relaxed ordering}(hjCKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj@Khhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjJhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj[KjHj[KjIjJjKuh1hhhhjhNhNubj)}(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)}(hjeKh]h Parameters}(hjgKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_Kubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj~Kubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhj~Kubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj{Kubah}(h]h ]h"]h$]h&]uh1jhj_KubjM)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_KubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh to (}(hjKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh + 1) with relaxed ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_KubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_KubjM)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_KubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj/LhhhNhNubj)}(h**v**h]hv}(hj7LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Lubh.}(hj/LhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj_Kubeh}(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}(hjpLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlLhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlLhhhj~LhMubh)}(hatomic_fetch_inch]j)}(hatomic_fetch_inch]hatomic_fetch_inc}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlLhhhj~LhMubj4)}(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.atomic_fetch_incasbuh1hhjLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hj|h]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubah}(h]h ]h"]h$]h&]jjuh1j3hjlLhhhj~LhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhLhhhj~LhMubah}(h]jcLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~LhMhjeLhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjeLhhhj~LhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,MjHj,MjIjJjKuh1hhhhjhNhNubj)}(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)}(hj6Mh]h Parameters}(hj8MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Mubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0Mubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjUMh]h atomic_t *v}(hjWMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjOMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjnMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjMhMhjkMubah}(h]h ]h"]h$]h&]uh1jhjOMubeh}(h]h ]h"]h$]h&]uh1jhjjMhMhjLMubah}(h]h ]h"]h$]h&]uh1jhj0MubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj0MubjM)}(h;Atomically updates **v** to (**v** + 1) with full 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 full ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0MubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0MubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj0MubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0Mubeh}(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}(hjANhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Nhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjPNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=NhhhjONhMubh)}(hatomic_fetch_inc_acquireh]j)}(hatomic_fetch_inc_acquireh]hatomic_fetch_inc_acquire}(hjbNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Nubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=NhhhjONhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Nubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjdNsbc.atomic_fetch_inc_acquireasbuh1hhjzNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzNubj)}(hj|h]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvNubah}(h]h ]h"]h$]h&]jjuh1j3hj=NhhhjONhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9NhhhjONhMubah}(h]j4Nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjONhMhj6Nhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hj6NhhhjONhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhjhNhNubj)}(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)}(hjOh]h Parameters}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj&Oh]h atomic_t *v}(hj(OhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$Oubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj Oubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj?OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;OhMhjAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjwOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwOubh to (}(hjwOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwOubh + 1) with acquire ordering.}(hjwOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubeh}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM!ubjQ)}(h h]h }(hj!PhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhj PhM!ubh)}(hatomic_fetch_inc_releaseh]j)}(hatomic_fetch_inc_releaseh]hatomic_fetch_inc_release}(hj3PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Pubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhj PhM!ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjRPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTPmodnameN classnameNjwjz)}j}]j)}jsj5Psbc.atomic_fetch_inc_releaseasbuh1hhjKPubjQ)}(h h]h }(hjrPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKPubj)}(hj|h]hv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGPubah}(h]h ]h"]h$]h&]jjuh1j3hjPhhhj PhM!ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Phhhj PhM!ubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj PhM!hjPhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM!hjPhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhj PhM!ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM%hjPubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjPh]h atomic_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM"hjPubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj QhM"hj Qubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj QhM"hjPubah}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hj2Qh]h Description}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Qubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM$hjPubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjHQhhhNhNubj)}(h**v**h]hv}(hjPQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHQubh to (}(hjHQhhhNhNubj)}(h**v**h]hv}(hjbQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHQubh + 1) with release ordering.}(hjHQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM#hjPubjM)}(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{QhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM%hjPubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM'hjPubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM(hjPubeh}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM3ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjQhM3ubh)}(hatomic_fetch_inc_relaxedh]j)}(hatomic_fetch_inc_relaxedh]hatomic_fetch_inc_relaxed}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjQhM3ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj#RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Rubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%RmodnameN classnameNjwjz)}j}]j)}jsjRsbc.atomic_fetch_inc_relaxedasbuh1hhjRubjQ)}(h h]h }(hjCRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjQRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hj|h]hv}(hj^RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubah}(h]h ]h"]h$]h&]jjuh1j3hjQhhhjQhM3ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQhhhjQhM3ubah}(h]jQah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhM3hjQhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM3hjRhhubah}(h]h ]h"]h$]h&]uh1j3hjQhhhjQhM3ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRjHjRjIjJjKuh1hhhhjhNhNubj)}(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)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM7hjRubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM4hjRubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhM4hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM4hjRubah}(h]h ]h"]h$]h&]uh1jhjRubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM6hjRubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjShhhNhNubj)}(h**v**h]hv}(hj!ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh to (}(hjShhhNhNubj)}(h**v**h]hv}(hj3ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh + 1) with relaxed ordering.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM5hjRubjM)}(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.}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM7hjRubjM)}(h **Return**h]j)}(hj]Sh]hReturn}(hj_ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Subah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM9hjRubjM)}(hThe original value of **v**.h](hThe original value of }(hjsShhhNhNubj)}(h**v**h]hv}(hj{ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsSubh.}(hjsShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM:hjRubeh}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMDubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjShMDubh)}(h atomic_dech]j)}(h atomic_dech]h atomic_dec}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjShMDubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjSsb c.atomic_decasbuh1hhjSubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hj"ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hj|h]hv}(hj/ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubah}(h]h ]h"]h$]h&]jjuh1j3hjShhhjShMDubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhjShMDubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMDhjShhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjXThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMDhjUThhubah}(h]h ]h"]h$]h&]uh1j3hjShhhjShMDubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpTjHjpTjIjJjKuh1hhhhjhNhNubj)}(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)}(hjzTh]h Parameters}(hj|ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMHhjtTubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMEhjTubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMEhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMEhjTubah}(h]h ]h"]h$]h&]uh1jhjtTubjM)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMGhjtTubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMFhjtTubjM)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMHhjtTubjM)}(h **Return**h]j)}(hj.Uh]hReturn}(hj0UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Uubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMJhjtTubjM)}(hNothing.h]hNothing.}(hjDUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhjtTubeh}(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}(hjsUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoUhhhjUhMUubh)}(hatomic_dec_returnh]j)}(hatomic_dec_returnh]hatomic_dec_return}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjoUhhhjUhMUubj4)}(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.atomic_dec_returnasbuh1hhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hj|h]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubah}(h]h ]h"]h$]h&]jjuh1j3hjoUhhhjUhMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkUhhhjUhMUubah}(h]jfUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMUhjhUhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMUhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjhUhhhjUhMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/VjHj/VjIjJjKuh1hhhhjhNhNubj)}(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)}(hj9Vh]h Parameters}(hj;VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Vubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMYhj3Vubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXVh]h atomic_t *v}(hjZVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMVhjRVubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjqVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmVhMVhjnVubah}(h]h ]h"]h$]h&]uh1jhjRVubeh}(h]h ]h"]h$]h&]uh1jhjmVhMVhjOVubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMXhj3VubjM)}(h;Atomically updates **v** to (**v** - 1) with full 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 full ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMWhj3VubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMYhj3VubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[hj3VubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjWhhhNhNubj)}(h**v**h]hv}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\hj3Vubeh}(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}(hjDWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Whhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMgubjQ)}(h h]h }(hjSWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@WhhhjRWhMgubh)}(hatomic_dec_return_acquireh]j)}(hatomic_dec_return_acquireh]hatomic_dec_return_acquire}(hjeWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaWubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@WhhhjRWhMgubj4)}(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)}jsjgWsbc.atomic_dec_return_acquireasbuh1hhj}WubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}Wubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Wubj)}(hj|h]hv}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Wubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyWubah}(h]h ]h"]h$]h&]jjuh1j3hj@WhhhjRWhMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhMhhj?Xubah}(h]h ]h"]h$]h&]uh1jhj#Xubeh}(h]h ]h"]h$]h&]uh1jhj>XhMhhj Xubah}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hjdXh]h Description}(hjfXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMjhjXubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjzXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzXubh to (}(hjzXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzXubh - 1) with acquire ordering.}(hjzXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMihjXubjM)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMkhjXubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMmhjXubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMnhjXubeh}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMxubjQ)}(h h]h }(hj$YhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhj#YhMxubh)}(hatomic_dec_return_releaseh]j)}(hatomic_dec_return_releaseh]hatomic_dec_return_release}(hj6YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Yubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhj#YhMxubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjUYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWYmodnameN classnameNjwjz)}j}]j)}jsj8Ysbc.atomic_dec_return_releaseasbuh1hhjNYubjQ)}(h h]h }(hjuYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNYubj)}(hj|h]hv}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJYubah}(h]h ]h"]h$]h&]jjuh1j3hjYhhhj#YhMxubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Yhhhj#YhMxubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#YhMxhj Yhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMxhjYhhubah}(h]h ]h"]h$]h&]uh1j3hj Yhhhj#YhMxubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM|hjYubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjYh]h atomic_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMyhjYubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMyhjZubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjZhMyhjYubah}(h]h ]h"]h$]h&]uh1jhjYubjM)}(h**Description**h]j)}(hj5Zh]h Description}(hj7ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Zubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM{hjYubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjKZhhhNhNubj)}(h**v**h]hv}(hjSZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKZubh to (}(hjKZhhhNhNubj)}(h**v**h]hv}(hjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKZubh - 1) with release ordering.}(hjKZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMzhjYubjM)}(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.}(hj~ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM|hjYubjM)}(h **Return**h]j)}(hjZh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~hjYubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubeh}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhjZhMubh)}(hatomic_dec_return_relaxedh]j)}(hatomic_dec_return_relaxedh]hatomic_dec_return_relaxed}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZhhhjZhMubj4)}(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_return_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)}(hj|h]hv}(hja[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[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]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:99: ./include/linux/atomic/atomic-instrumented.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjZhMubeh}(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_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:99: ./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:99: ./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:99: ./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}(hj6\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:99: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(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.}(hjO\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(h **Return**h]j)}(hj`\h]hReturn}(hjb\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjv\hhhNhNubj)}(h**v**h]hv}(hj~\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv\ubh.}(hjv\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj[ubeh}(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}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\hhhj\hMubh)}(hatomic_fetch_dech]j)}(hatomic_fetch_dech]hatomic_fetch_dec}(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_decasbuh1hhj\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)}(hj|h]hv}(hj2]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 full orderingh]h#atomic decrement with full ordering}(hj[]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjX]hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhj\hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjs]jHjs]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_dec() 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:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]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:99: ./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&]uh1jhjw]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]ubjM)}(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 ^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]ubjM)}(h **Return**h]j)}(hj1^h]hReturn}(hj3^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/^ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]ubjM)}(hThe original value of **v**.h](hThe original value of }(hjG^hhhNhNubj)}(h**v**h]hv}(hjO^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG^ubh.}(hjG^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjw]ubeh}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj^hMubh)}(hatomic_fetch_dec_acquireh]j)}(hatomic_fetch_dec_acquireh]hatomic_fetch_dec_acquire}(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_dec_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)}(hj|h]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 decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj,_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj)_hhubah}(h]h ]h"]h$]h&]uh1j3hj}^hhhj^hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjD_jHjD_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_dec_acquire() there. **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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjH_ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjm_h]h atomic_t *v}(hjo_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjk_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjg_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&]uh1jhjg_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjd_ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjH_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:99: ./include/linux/atomic/atomic-instrumented.hhMhjH_ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjH_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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjH_ubeh}(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}(hjY`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjh`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU`hhhjg`hMubh)}(hatomic_fetch_dec_releaseh]j)}(hatomic_fetch_dec_releaseh]hatomic_fetch_dec_release}(hjz`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjU`hhhjg`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)}(hj|h]hv}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hjU`hhhjg`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQ`hhhjg`hMubah}(h]jL`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjg`hMhjN`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:99: ./include/linux/atomic/atomic-instrumented.hhMhj`hhubah}(h]h ]h"]h$]h&]uh1j3hjN`hhhjg`hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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)}(hjah]h Parameters}(hj!ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj>ah]h atomic_t *v}(hj@ahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAtomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh to (}(hjahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh - 1) with release ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubeh}(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}(hj*bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&bhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj9bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&bhhhj8bhMubh)}(hatomic_fetch_dec_relaxedh]j)}(hatomic_fetch_dec_relaxedh]hatomic_fetch_dec_relaxed}(hjKbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGbubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&bhhhj8bhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlbmodnameN classnameNjwjz)}j}]j)}jsjMbsbc.atomic_fetch_dec_relaxedasbuh1hhjcbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubj)}(hj|h]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_bubah}(h]h ]h"]h$]h&]jjuh1j3hj&bhhhj8bhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"bhhhj8bhMubah}(h]jbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8bhMhjbhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhj8bhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(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)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubj)}(hhh]j)}(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&]uh1jRhj cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj cubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj(chhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$chMhj%cubah}(h]h ]h"]h$]h&]uh1jhj cubeh}(h]h ]h"]h$]h&]uh1jhj$chMhjcubah}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hjJch]h Description}(hjLchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHcubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj`chhhNhNubj)}(h**v**h]hv}(hjhchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`cubh to (}(hj`chhhNhNubj)}(h**v**h]hv}(hjzchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`cubh - 1) with relaxed ordering.}(hj`chhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubjM)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubjM)}(hThe original value of **v**.h](hThe original value of }(hjchhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubeh}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhj dhMubh)}(h atomic_andh]j)}(h atomic_andh]h atomic_and}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhj dhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj8dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4dubjQ)}(h h]h }(hjFdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4dubj)}(hjh]hi}(hjTdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4dubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0dubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjodhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjldubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqdmodnameN classnameNjwjz)}j}]j)}jsjdsb c.atomic_andasbuh1hhjhdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhdubj)}(hj|h]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0dubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhj dhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhj dhMubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj dhMhjchhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhj dhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjeh]hint i}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubj)}(hhh]jM)}(h int valueh]h int value}(hj-ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)ehMhj*eubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhj)ehMhj eubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjMeh]h atomic_t *v}(hjOehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGeubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjfehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbehMhjceubah}(h]h ]h"]h$]h&]uh1jhjGeubeh}(h]h ]h"]h$]h&]uh1jhjbehMhj eubeh}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjehhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh to (}(hjehhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh & }(hjehhhNhNubj)}(h**i**h]hi}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh) with relaxed ordering.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubjM)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubjM)}(h **Return**h]j)}(hjeh]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubjM)}(hNothing.h]hNothing.}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjdubeh}(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}(hj9fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5fhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjHfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5fhhhjGfhMubh)}(hatomic_fetch_andh]j)}(hatomic_fetch_andh]hatomic_fetch_and}(hjZfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVfubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5fhhhjGfhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjvfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrfubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrfubj)}(hjh]hi}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnfubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsj\fsbc.atomic_fetch_andasbuh1hhjfubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnfubeh}(h]h ]h"]h$]h&]jjuh1j3hj5fhhhjGfhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1fhhhjGfhMubah}(h]j,fah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGfhMhj.fhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hj.fhhhjGfhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)gjHj)gjIjJjKuh1hhhhjhNhNubj)}(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)}(hj3gh]h Parameters}(hj5ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1gubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjRgh]hint i}(hjTghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjLgubj)}(hhh]jM)}(h int valueh]h int value}(hjkghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjgghMhjhgubah}(h]h ]h"]h$]h&]uh1jhjLgubeh}(h]h ]h"]h$]h&]uh1jhjgghMhjIgubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjgh]h atomic_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjgubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIgubeh}(h]h ]h"]h$]h&]uh1jhj-gubjM)}(h**Description**h]j)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjghhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh to (}(hjghhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh & }(hjghhhNhNubj)}(h**i**h]hi}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh) with full ordering.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubjM)}(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!hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubjM)}(h **Return**h]j)}(hj2hh]hReturn}(hj4hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0hubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubjM)}(hThe original value of **v**.h](hThe original value of }(hjHhhhhNhNubj)}(h**v**h]hv}(hjPhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHhubh.}(hjHhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj-gubeh}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjhhMubh)}(hatomic_fetch_and_acquireh]j)}(hatomic_fetch_and_acquireh]hatomic_fetch_and_acquire}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjhhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]hi}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]j)}jsjhsbc.atomic_fetch_and_acquireasbuh1hhjhubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hj+ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hj|h]hv}(hj8ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjhhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjhhMubah}(h]j|hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhMhj~hhhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjaihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj^ihhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhhjhhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyijHjyijIjJjKuh1hhhhjhNhNubj)}(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)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj}iubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjih]hint i}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(hhh]jM)}(h int valueh]h int value}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjih]h atomic_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jhjihMhjiubeh}(h]h ]h"]h$]h&]uh1jhj}iubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj}iubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hj,jhhhNhNubj)}(h**v**h]hv}(hj4jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,jubh to (}(hj,jhhhNhNubj)}(h**v**h]hv}(hjFjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,jubh & }(hj,jhhhNhNubj)}(h**i**h]hi}(hjXjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,jubh) with acquire ordering.}(hj,jhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj}iubjM)}(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.}(hjqjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj}iubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj}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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj}iubeh}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhjjhMubh)}(hatomic_fetch_and_releaseh]j)}(hatomic_fetch_and_releaseh]hatomic_fetch_and_release}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhjjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjQ)}(h h]h }(hj$khhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]hi}(hj2khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjMkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOkmodnameN classnameNjwjz)}j}]j)}jsjjsbc.atomic_fetch_and_releaseasbuh1hhjFkubjQ)}(h h]h }(hjmkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFkubj)}(hjh]h*}(hj{khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFkubj)}(hj|h]hv}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubeh}(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 bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjkh]hint i}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubj)}(hhh]jM)}(h int valueh]h int value}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj+lh]h atomic_t *v}(hj-lhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)lubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj%lubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjDlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@lhMhjAlubah}(h]h ]h"]h$]h&]uh1jhj%lubeh}(h]h ]h"]h$]h&]uh1jhj@lhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h**Description**h]j)}(hjflh]h Description}(hjhlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hj|lhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|lubh to (}(hj|lhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|lubh & }(hj|lhhhNhNubj)}(h**i**h]hi}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|lubh) with release ordering.}(hj|lhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(hThe original value of **v**.h](hThe original value of }(hjlhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjkubeh}(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}(hj)mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%mhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hj8mhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%mhhhj7mhM+ubh)}(hatomic_fetch_and_relaxedh]j)}(hatomic_fetch_and_relaxedh]hatomic_fetch_and_relaxed}(hjJmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFmubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%mhhhj7mhM+ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjfmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbmubjQ)}(h h]h }(hjtmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbmubj)}(hjh]hi}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^mubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsjLmsbc.atomic_fetch_and_relaxedasbuh1hhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj|h]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^mubeh}(h]h ]h"]h$]h&]jjuh1j3hj%mhhhj7mhM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!mhhhj7mhM+ubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7mhM+hjmhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+hjmhhubah}(h]h ]h"]h$]h&]uh1j3hjmhhhj7mhM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjnjHjnjIjJjKuh1hhhhjhNhNubj)}(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#nh]h Parameters}(hj%nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!nubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM/hjnubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjBnh]hint i}(hjDnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@nubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM,hjhjpubj)}(hhh]jM)}(h int valueh]h int value}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM>hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM>hjpubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjph]h atomic_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM?hjpubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM?hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM?hjpubeh}(h]h ]h"]h$]h&]uh1jhjmpubjM)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMAhjmpubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjqhhhNhNubj)}(h**v**h]hv}(hj$qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh to (}(hjqhhhNhNubj)}(h**v**h]hv}(hj6qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh & }(hjqhhhNhNubj)}(h**~i**h]h~i}(hjHqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh) with relaxed ordering.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM@hjmpubjM)}(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.}(hjaqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMBhjmpubjM)}(h **Return**h]j)}(hjrqh]hReturn}(hjtqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMDhjmpubjM)}(hNothing.h]hNothing.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMEhjmpubeh}(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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqhhhjqhMOubh)}(hatomic_fetch_andnoth]j)}(hatomic_fetch_andnoth]hatomic_fetch_andnot}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhhjqhMOubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]hi}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj+rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(rubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-rmodnameN classnameNjwjz)}j}]j)}jsjqsbc.atomic_fetch_andnotasbuh1hhj$rubjQ)}(h h]h }(hjKrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$rubj)}(hjh]h*}(hjYrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$rubj)}(hj|h]hv}(hjfrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$rubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubeh}(h]h ]h"]h$]h&]jjuh1j3hjqhhhjqhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjqhMOubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhMOhjqhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMOhjrhhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjqhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMShjrubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjrh]hint i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMPhjrubj)}(hhh]jM)}(h int valueh]h int value}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhMPhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMPhjrubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj sh]h atomic_t *v}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMQhjsubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj"shhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMQhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMQhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hjDsh]h Description}(hjFshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMShjrubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjZshhhNhNubj)}(h**v**h]hv}(hjbshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZsubh to (}(hjZshhhNhNubj)}(h**v**h]hv}(hjtshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZsubh & }(hjZshhhNhNubj)}(h**~i**h]h~i}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZsubh) with full ordering.}(hjZshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMRhjrubjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMThjrubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMVhjrubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMWhjrubeh}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMbubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjthMbubh)}(hatomic_fetch_andnot_acquireh]j)}(hatomic_fetch_andnot_acquireh]hatomic_fetch_andnot_acquire}(hj(thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$tubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjthMbubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjDthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@tubjQ)}(h h]h }(hjRthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@tubj)}(hjh]hi}(hj`thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@tubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjh]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:99: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]jM)}(h int valueh]h int value}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjwh]h atomic_t *v}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.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}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqhhhjhMubh)}(h atomic_xorh]j)}(h atomic_xorh]h atomic_xor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhhjhMubj4)}(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)}jsjsb c.atomic_xorasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjqhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjmhhhjhMubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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)}(hjLJh]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjDhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_xor() there.h]h:Unsafe to use in noinstr code; use raw_atomic_xor() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_xor (C function)c.atomic_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)int atomic_fetch_xor (int i, atomic_t *v)h]h)}(h(int atomic_fetch_xor(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjˆhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_fetch_xorh]j)}(hatomic_fetch_xorh]hatomic_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}(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)}jsjֈsbc.atomic_fetch_xorasbuh1hhj ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj|h]hv}(hjbhhhNhNubah}(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 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:99: ./include/linux/atomic/atomic-instrumented.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. Unsafe to use in noinstr code; use raw_atomic_fetch_xor() 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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 hjÉubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(hjphhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_xor_acquire (C function)c.atomic_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_xor_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_xor_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_fetch_xor_acquireh]j)}(hatomic_fetch_xor_acquireh]hatomic_fetch_xor_acquire}(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}(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:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsj&sbc.atomic_fetch_xor_acquireasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hj|h]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 XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjۋhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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. Unsafe to use in noinstr code; use raw_atomic_fetch_xor_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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_xor_release (C function)c.atomic_fetch_xor_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_xor_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_xor_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM,ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjahM,ubh)}(hatomic_fetch_xor_releaseh]j)}(hatomic_fetch_xor_releaseh]hatomic_fetch_xor_release}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjahM,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}(hjǍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjčubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjɍmodnameN classnameNjwjz)}j}]j)}jsjvsbc.atomic_fetch_xor_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjahM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjahM,ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahM,hjHhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM,hj(hhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjahM,ubeh}(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 release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there. **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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM0hjGubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjlh]hint i}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM-hjfubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjcubj)}(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:99: ./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.hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM0hjGubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM/hjGubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM1hjGubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM3hjGubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM4hjGubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM?ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM?ubh)}(hatomic_fetch_xor_relaxedh]j)}(hatomic_fetch_xor_relaxedh]hatomic_fetch_xor_relaxed}(hjďhhhNhNubah}(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&]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)}jsjƏsbc.atomic_fetch_xor_relaxedasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjRhhhNhNubah}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhM?hjxhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM?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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMChjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM@hjubj)}(hhh]jM)}(h int valueh]h int value}(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_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:99: ./include/linux/atomic/atomic-instrumented.hhMAhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMAhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMAhjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMChjubjM)}(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}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh ^ }(hjFhhhNhNubj)}(h**i**h]hi}(hjrhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMBhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMDhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMGhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMQubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMQubh)}(h atomic_xchgh]j)}(h atomic_xchgh]h atomic_xchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMQubj4)}(h(atomic_t *v, int new)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)}jsjsb c.atomic_xchgasbuh1hhj,ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hj|h]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(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&]jjuh1j3hjhhhjhMQubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMQubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMQhjhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hj̒hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMQhjɒhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMQubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMUhjubj)}(hhh](j)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMRhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMRhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMRhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjFh]hint new}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMShj@ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMShj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMShjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMThjubjM)}(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.}(hjʓhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMVhjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj@hMdubh)}(hatomic_xchg_acquireh]j)}(hatomic_xchg_acquireh]hatomic_xchg_acquire}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhj@hMdubj4)}(h(atomic_t *v, int new)h](j:)}(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)}jsjUsbc.atomic_xchg_acquireasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubj:)}(hint newh](j)}(hinth]hint}(hjŔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjӔhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubeh}(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 exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj@hMdubeh}(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 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)}(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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMehjFubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMehjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMehjCubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMfhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjCubeh}(h]h ]h"]h$]h&]uh1jhj'ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhhj'ubjM)}(h:Atomically updates **v** to **new** 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**new**h]hnew}(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:99: ./include/linux/atomic/atomic-instrumented.hhMghj'ubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMihj'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:99: ./include/linux/atomic/atomic-instrumented.hhMkhj'ubjM)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMlhj'ubeh}(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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjhMvubh)}(hatomic_xchg_releaseh]j)}(hatomic_xchg_releaseh]hatomic_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmhhhjhMvubj4)}(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)}jsjsbc.atomic_xchg_releaseasbuh1hhjubjQ)}(h h]h }(hjіhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjߖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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&]jjuh1j3hjmhhhjhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjhMvubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMvhjfhhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMvhjGhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjhMvubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic_xchg_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMzhjfubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMwhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMxhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjݗhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjٗhMxhjڗubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٗhMxhjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMzhjfubjM)}(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}(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:99: ./include/linux/atomic/atomic-instrumented.hhMyhjfubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_xchg_release() there.h]hCUnsafe to use in noinstr code; use raw_atomic_xchg_release() there.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM{hjfubjM)}(h **Return**h]j)}(hjYh]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM}hjfubjM)}(hThe original value of **v**.h](hThe original value of }(hjohhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_xchg_relaxed (C function)c.atomic_xchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.int atomic_xchg_relaxed (atomic_t *v, int new)h]h)}(h-int atomic_xchg_relaxed(atomic_t *v, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_xchg_relaxedh]j)}(hatomic_xchg_relaxedh]hatomic_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.atomic_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjQ)}(h h]h }(hjQhhhNhNubah}(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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(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. Unsafe to use in noinstr code; use raw_atomic_xchg_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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjęubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjߙhMhjubah}(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)}(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:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to }(hjThhhNhNubj)}(h**new**h]hnew}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh with relaxed ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_xchg_relaxed() there.h]hCUnsafe to use in noinstr code; use raw_atomic_xchg_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_cmpxchg (C function)c.atomic_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_cmpxchg (atomic_t *v, int old, int new)h]h)}(h1int atomic_cmpxchg(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.h"hMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_cmpxchgh]j)}(hatomic_cmpxchgh]hatomic_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(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 reftargetj1modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_cmpxchgasbuh1hhj(ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hj|h]hv}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$ubj:)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$ubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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 full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there. **Return** The original value of **v**.h](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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjwh]hint old}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(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:99: ./include/linux/atomic/atomic-instrumented.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ŜhMhj5ubeh}(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:99: ./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}(hj hhhNhNubah}(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 full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjQhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.h]h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hjҝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΝhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjΝhhhjhMubh)}(hatomic_cmpxchg_acquireh]j)}(hatomic_cmpxchg_acquireh]hatomic_cmpxchg_acquire}(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_cmpxchg_acquireasbuh1hhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj|h]hv}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(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Ν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 acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjݞhhubah}(h]h ]h"]h$]h&]uh1j3hjǝhhhjhMubeh}(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. Unsafe to use in noinstr code; use raw_atomic_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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjZh]hint old}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubj)}(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:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjĠhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjàhMubh)}(hatomic_cmpxchg_releaseh]j)}(hatomic_cmpxchg_releaseh]hatomic_cmpxchg_release}(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_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(holdh]hold}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(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&]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 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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(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 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)}(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:99: ./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:99: ./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&]uh1jhjhMhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjvh]hint new}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjpubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(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:99: ./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}(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}(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:99: ./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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjߡubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjߡubjM)}(hThe original value of **v**.h](hThe original value of }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_cmpxchg_relaxedh]j)}(hatomic_cmpxchg_relaxedh]hatomic_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}(hjأhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjգubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjڣmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_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)}(hj|h]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 }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(holdh]hold}(hjGhhhNhNubah}(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 }(hjnhhhNhNubah}(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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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. 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:99: ./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:99: ./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&]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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjޤubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjYh]hint new}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjSubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjޤ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:99: ./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}(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**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:99: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj¤ubjM)}(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:99: ./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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhMubh)}(hatomic_try_cmpxchgh]j)}(hatomic_try_cmpxchgh]hatomic_try_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjhMubj4)}(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_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjڦhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(holdh]hold}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hnewh]hnew}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhMubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjphhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhMubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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:99: ./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)}(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&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(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 new`` int value to assign h](j)}(h ``int new``h]jS)}(hjHh]hint new}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjahhhNhNubah}(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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.h]hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj7h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh if the exchange occurred, }(hjMhhhNhNubj)}(h **false**h]hfalse}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh otherwise.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_try_cmpxchg_acquireh]j)}(hatomic_try_cmpxchg_acquireh]hatomic_try_cmpxchg_acquire}(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_cmpxchg_acquireasbuh1hhjԩubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjԩubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԩubj)}(hj|h]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 }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(holdh]hold}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjЩubj:)}(hint newh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(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 acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hj0h]hint *old}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjih]hint new}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjcubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubeh}(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:99: ./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 (}(hjhhhNhNubj)}(h**v**h]hv}(hj«hhhNhNubah}(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 acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjҪubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjҪubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjҪubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh if the exchange occurred, }(hjnhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh otherwise.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjˬhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjʬhMubh)}(hatomic_try_cmpxchg_releaseh]j)}(hatomic_try_cmpxchg_releaseh]hatomic_try_cmpxchg_release}(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_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(holdh]hold}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(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 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:99: ./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 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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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)}(h2``int *old`` pointer to 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjKubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 (}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM"hjubjM)}(h **Return**h]j)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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}(hjޯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjگhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjگhhhjhM1ubh)}(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&]jjuh1hhjگhhhjhM1ubj4)}(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_relaxedasbuh1hhjubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjQ)}(h h]h }(hj~hhhNhNubah}(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:)}(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&]jjuh1j3hjگhhhjhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj֯hhhjhM1ubah}(h]jѯah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM1hjӯ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:99: ./include/linux/atomic/atomic-instrumented.hhM1hjhhubah}(h]h ]h"]h$]h&]uh1j3hjӯhhhjhM1ubeh}(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. 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM5hjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.h\hM2hj3ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM2hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM2hj0ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjrh]hint *old}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM3hjlubj)}(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&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj0ubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM4hjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjıhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj0ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhM6hjubjM)}(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}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM5hjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM9hjubjM)}(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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM<hjubeh}(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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMGubj4)}(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!sbc.atomic_sub_and_testasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(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}(hjֳhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMGhjӳhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMGubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMHhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMHhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMHhjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMIhjJubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMIhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMIhjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMKhjubjM)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(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}(hj5hhhNhNubah}(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:99: ./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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhj{hMZubh)}(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&]jjuh1hhjjhhhj{hMZubj4)}(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_and_testasbuh1hhjubjQ)}(h h]h }(hj͵hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj۵hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjjhhhj{hMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjfhhhj{hMZubah}(h]jaah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMZhjchhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhj{hMZubeh}(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. 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)}(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:99: ./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)}(hjRh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[hjLubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghM[hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM[hjIubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM]hj-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:99: ./include/linux/atomic/atomic-instrumented.hhM\hj-ubjM)}(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.}(hjֶhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM`hj-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}(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:99: ./include/linux/atomic/atomic-instrumented.hhMahj-ubeh}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhjkhMlubh)}(hatomic_inc_and_testh]j)}(hatomic_inc_and_testh]hatomic_inc_and_test}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZhhhjkhMlubj4)}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj˷hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjطhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjZhhhjkhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhhhjkhMlubah}(h]jQah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjkhMlhjShhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMlhjhhubah}(h]h ]h"]h$]h&]uh1j3hjShhhjkhMlubeh}(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. 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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMphjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjBh]h atomic_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMmhj<ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMmhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMmhj9ubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMohjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMnhjubjM)}(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.}(hjƸhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMphjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMrhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMshjubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj[hM~ubh)}(hatomic_add_negativeh]j)}(hatomic_add_negativeh]hatomic_add_negative}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj[hM~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 reftargetjùmodnameN classnameNjwjz)}j}]j)}jsjpsbc.atomic_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjJhhhj[hM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj[hM~ubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hM~hjChhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM~hj"hhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj[hM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjfh]hint i}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj`ubj)}(hhh]jM)}(hint value to addh]hint 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$``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:99: ./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&]uh1jhjhMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(h **Return**h]j)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubjM)}(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}(hjrhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjAubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj˻hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjʻhMubh)}(hatomic_add_negative_acquireh]j)}(hatomic_add_negative_acquireh]hatomic_add_negative_acquire}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsj߻sbc.atomic_add_negative_acquireasbuh1hhj)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hj|h]hv}(hjkhhhNhNubah}(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 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:99: ./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 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)}(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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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#hMhj̼ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire 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 + }(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./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}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj9hMubh)}(hatomic_add_negative_releaseh]j)}(hatomic_add_negative_releaseh]hatomic_add_negative_release}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj9hMubj4)}(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_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjھhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj9hMubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj;ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjwubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjοubh + }(hjοhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh is negative, }(hj:hhhNhNubj)}(h **false**h]hfalse}(hjbhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_add_negative_relaxedh]j)}(hatomic_add_negative_relaxedh]hatomic_add_negative_relaxed}(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}(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_negative_relaxedasbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjohhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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:99: ./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&]uh1jhjhMhjubj)}(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:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./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:99: ./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:99: ./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&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_fetch_add_unlessh]j)}(hatomic_fetch_add_unlessh]hatomic_fetch_add_unless}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]j)}jsj-sbc.atomic_fetch_add_unlessasbuh1hhjCubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(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)}(hah]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&]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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXh]h atomic_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(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:99: ./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&]uh1jhjhMhjOubj)}(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:99: ./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&]uh1jhjhMhjOubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubeh}(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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_add_unlessasbuh1hhj6ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hj|h]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(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&]noemphjjuh1j9hj2ubeh}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(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)}(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:99: ./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)}(hjJh]h atomic_t *v}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjDubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(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:99: ./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&]uh1jhjhMhjAubj)}(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:99: ./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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhj%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}(hjhhhNhNubah}(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}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(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}(hjohhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj%ubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj%ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMubh)}(hatomic_inc_not_zeroh]j)}(hatomic_inc_not_zeroh]hatomic_inc_not_zero}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMubj4)}(h (atomic_t *v)h]j:)}(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)}jsj2sbc.atomic_inc_not_zeroasbuh1hhjHubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubah}(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)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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:99: ./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:99: ./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 hMhjubah}(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:99: ./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 (}(hjEhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh != 0), atomically updates }(hjEhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh to (}(hjEhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh% + 1) with full ordering. Otherwise, }(hjEhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh2 is not modified and relaxed ordering is provided.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj1hMubh)}(hatomic_inc_unless_negativeh]j)}(hatomic_inc_unless_negativeh]hatomic_inc_unless_negative}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj1hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsjFsbc.atomic_inc_unless_negativeasbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj1hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMhjhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj1hMubeh}(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:99: ./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)}(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:99: ./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&]uh1jhjhMhjubah}(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:99: ./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 (}(hjYhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh >= 0), atomically updates }(hjYhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh to (}(hjYhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh% + 1) with full ordering. Otherwise, }(hjYhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh2 is not modified and relaxed ordering is provided.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhjEhMubh)}(hatomic_dec_unless_positiveh]j)}(hatomic_dec_unless_positiveh]hatomic_dec_unless_positive}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhjEhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsjZsbc.atomic_dec_unless_positiveasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubah}(h]h ]h"]h$]h&]jjuh1j3hj4hhhjEhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhjEhMubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhMhj-hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhjEhMubeh}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 (}(hjmhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh <= 0), atomically updates }(hjmhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh to (}(hjmhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh% - 1) with full ordering. Otherwise, }(hjmhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh2 is not modified and relaxed ordering is provided.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjZhM+ubh)}(hatomic_dec_if_positiveh]j)}(hatomic_dec_if_positiveh]hatomic_dec_if_positive}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjZhM+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)}jsjosbc.atomic_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjHhhhjZhM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjZhM+ubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhM+hjAhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+hjhhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjZhM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./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)}(hj1h]h atomic_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM,hj+ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM,hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM,hj(ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) 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:99: ./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:99: ./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:99: ./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}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}js atomic64_readsbc.atomic64_readasbuh1hhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM>ubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjwhM>ubh)}(h atomic64_readh]j)}(hjth]h atomic64_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjwhM>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}]jrc.atomic64_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjwhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjwhM>ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhM>hjHhhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM>hj"hhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjwhM>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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMBhjAubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjfh]hconst atomic64_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM?hj`ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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]ubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMAhjAubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM@hjAubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMBhjAubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMDhjAubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMEhjAubeh}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsatomic64_read_acquiresbc.atomic64_read_acquireasbuh1hhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhjdhMOubh)}(hatomic64_read_acquireh]j)}(hjah]hatomic64_read_acquire}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhjdhMOubj4)}(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}]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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj<hhhjdhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhjdhMOubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhMOhj5hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhjdhMOubeh}(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. Unsafe to use in noinstr code; use raw_atomic64_read_acquire() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMShj.ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjSh]hconst atomic64_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMPhjMubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMPhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMPhjJubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMRhj.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMQhj.ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMShj.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:99: ./include/linux/atomic/atomic-instrumented.hhMUhj.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMVhj.ubeh}(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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM`ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj;hM`ubh)}(h atomic64_seth]j)}(h atomic64_seth]h atomic64_set}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj;hM`ubj4)}(h(atomic64_t *v, s64 i)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}]j)}jsjPsbc.atomic64_setasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(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_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&]noemphjjuh1j9hjbubeh}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhj;hM`ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdhj4ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMahjSubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMahjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMahjPubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMbhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjPubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdhj4ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMchj4ubjM)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM>hj6ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhM>hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM>hj3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t Oh](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:99: ./include/linux/atomic/atomic-instrumented.hhM?hjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj3ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMAhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM@hjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMBhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMDhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMEhjubeh}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_acquiresbc.atomic64_sub_return_acquireasbuh1hhjohhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMPubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMPubh)}(hatomic64_sub_return_acquireh]j)}(hjh]hatomic64_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhMPubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhMPubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMPhjhhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMPhjnhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhMPubeh}(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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMRhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_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:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_releasesbc.atomic64_sub_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMbubjQ)}(h h]h }(hjhhhNhNubah}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMbubj4)}(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}]jc.atomic64_sub_return_releaseasbuh1hhj7ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(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_releaseasbuh1hhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(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:99: ./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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMfhjubj)}(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&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMchj"ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMchj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMchjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjah]h atomic64_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:99: ./include/linux/atomic/atomic-instrumented.hhMdhj[ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMdhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMdhjubeh}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMghjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMihjubjM)}(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:99: ./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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_relaxedsbc.atomic64_sub_return_relaxedasbuh1hhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjhMuubh)}(hatomic64_sub_return_relaxedh]j)}(hjh]hatomic64_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjhMuubj4)}(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.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}]j~c.atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjhMuubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjThhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMuhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMyhjyubj)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMwhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMyhjyubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMxhjyubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMzhjyubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM|hjyubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM}hjyubeh}(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:99: ./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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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}]jc.atomic64_fetch_subasbuh1hhj#ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]hi}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(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}]jc.atomic64_fetch_subasbuh1hhjjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hj|h]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 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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 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)hMhj ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjMh]h atomic64_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj 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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_acquiresbc.atomic64_fetch_sub_acquireasbuh1hhjGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjohMubh)}(hatomic64_fetch_sub_acquireh]j)}(hjlh]hatomic64_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjohMubj4)}(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}]jjc.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}]jjc.atomic64_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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 subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjohMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubj)}(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:99: ./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:99: ./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&]uh1jhjeubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjeubeh}(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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhjubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhjVubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(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:99: ./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:99: ./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:99: ./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)}(hj9h]h atomic64_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjubeh}(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:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_relaxedsbc.atomic64_fetch_sub_relaxedasbuh1hhj3hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj[hMubh)}(hatomic64_fetch_sub_relaxedh]j)}(hjXh]hatomic64_fetch_sub_relaxed}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj[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 reftargetjmodnameN classnameNjwjz)}j}]jVc.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}]jVc.atomic64_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj[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 relaxed orderingh]h%atomic subtract with relaxed ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1j3hj,hhhj[hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjMjHjMjIjJjKuh1hhhhjhNhNubj)}(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)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjvh]hs64 i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjpubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(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:99: ./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&]uh1jhjhMhjmubeh}(h]h ]h"]h$]h&]uh1jhjQubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubjM)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjQubeh}(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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_incasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 relaxed orderingh]h&atomic increment with relaxed ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjmubj)}(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:99: ./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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjmubjM)}(hAtomically 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:99: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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}(hj7 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4 ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9 modnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_releasesbc.atomic64_inc_return_releaseasbuh1hhj0 hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjY hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0 hhhjX hMubh)}(hatomic64_inc_return_releaseh]j)}(hjU h]hatomic64_inc_return_release}(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0 hhhjX hMubj4)}(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}]jS c.atomic64_inc_return_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)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ ubah}(h]h ]h"]h$]h&]jjuh1j3hj0 hhhjX hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj, hhhjX hMubah}(h]j' ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjX 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj) hhhjX hMubeh}(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. 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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj& ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA hMhjB ubah}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hMhj# ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjg h]h Description}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_relaxedsbc.atomic64_inc_return_relaxedasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj= hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj< hMubh)}(hatomic64_inc_return_relaxedh]j)}(hj9 h]hatomic64_inc_return_relaxed}(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj< hMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjo modnameN classnameNjwjz)}j}]j7 c.atomic64_inc_return_relaxedasbuh1hhjf ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb 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:99: ./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** ``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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(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:99: ./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&]uh1jhj ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with relaxed ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(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:99: ./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)}(hjh]hatomic64_fetch_inc}(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_incasbuh1hhjJubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hj|h]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 full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj 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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM+hjubjM)}(h;Atomically updates **v** to (**v** + 1) with full 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 full ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM:ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM:ubh)}(hatomic64_fetch_inc_acquireh]j)}(hjh]hatomic64_fetch_inc_acquire}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_acquireasbuh1hhj.ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hj|h]hv}(hjnhhhNhNubah}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhM:hjhhubah}(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 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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM=hjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire 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 acquire ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM>hjubjM)}(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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_releaseasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhjxhhubah}(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:99: ./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:99: ./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:99: ./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}(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 release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMOhjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMQhjubjM)}(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:99: ./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:99: ./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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj6hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM]hj\hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjwjHjwjIjJjKuh1hhhhjhNhNubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMahj{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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]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:99: ./include/linux/atomic/atomic-instrumented.hhM`hj{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}(hj hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM_hj{ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMahj{ubjM)}(h **Return**h]j)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMchj{ubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdhj{ubeh}(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:99: ./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)}(hj|h]hv}(hjhhhNhNubah}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMnhj-hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMrhjLubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjqh]h atomic64_t *v}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMohjkubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMohjhubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMqhjLubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMphjLubjM)}(hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjohMhj@hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjohMubeh}(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_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&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_acquiresbc.atomic64_dec_return_acquireasbuh1hhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhjShMubh)}(hatomic64_dec_return_acquireh]j)}(hjPh]hatomic64_dec_return_acquire}(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_acquireasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hj|h]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 acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire 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 acquire ordering.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_releasesbc.atomic64_dec_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj7hMubh)}(hatomic64_dec_return_releaseh]j)}(hj4h]hatomic64_dec_return_release}(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_releaseasbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hj|h]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 release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release 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 release ordering.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_dec_return_relaxedh]j)}(hjh]hatomic64_dec_return_relaxed}(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_dec_return_relaxedasbuh1hhjEubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hj|h]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 relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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:99: ./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:99: ./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:99: ./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}(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 relaxed ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(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}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2 modnameN classnameNjwjz)}j}]jc.atomic64_fetch_decasbuh1hhj) 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)}(hj|h]hv}(hji 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 full orderingh]h#atomic decrement with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec() 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:99: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(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.}(hjW!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj 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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_acquiresbc.atomic64_fetch_dec_acquireasbuh1hhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj!hMubh)}(hatomic64_fetch_dec_acquireh]j)}(hj!h]hatomic64_fetch_dec_acquire}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj!hMubj4)}(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.atomic64_fetch_dec_acquireasbuh1hhj "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)}(hj|h]hv}(hjM"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 acquire orderingh]h&atomic decrement with acquire ordering}(hjv"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjs"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 **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)}(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:99: ./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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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"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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(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.}(hj;#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(h **Return**h]j)}(hjL#h]hReturn}(hjN#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ#ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(hThe original value of **v**.h](hThe original value of }(hjb#hhhNhNubj)}(h**v**h]hv}(hjj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb#ubh.}(hjb#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj"ubeh}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_releasesbc.atomic64_fetch_dec_releaseasbuh1hhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hMubh)}(hatomic64_fetch_dec_releaseh]j)}(hj#h]hatomic64_fetch_dec_release}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hMubj4)}(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.atomic64_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)}(hj|h]hv}(hj1$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 release orderingh]h&atomic decrement with release ordering}(hjZ$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjW$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjr$jHjr$jIjJjKuh1hhhhjhNhNubj)}(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)}(hj|$h]h Parameters}(hj~$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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$hMhj$ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$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:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$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:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$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:99: ./include/linux/atomic/atomic-instrumented.hhMhjv$ubeh}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_relaxedsbc.atomic64_fetch_dec_relaxedasbuh1hhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hMubh)}(hatomic64_fetch_dec_relaxedh]j)}(hj%h]hatomic64_fetch_dec_relaxed}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%hMubj4)}(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.atomic64_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)}(hj|h]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]jz%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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj;&hhubah}(h]h ]h"]h$]h&]uh1j3hj|%hhhj%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjV&jHjV&jIjJjKuh1hhhhjhNhNubj)}(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}(hjb&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZ&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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjy&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&]uh1jhjy&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjv&ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZ&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:99: ./include/linux/atomic/atomic-instrumented.hhMhjZ&ubjM)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZ&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:99: ./include/linux/atomic/atomic-instrumented.hhM hjZ&ubjM)}(hThe original value of **v**.h](hThe original value of }(hj*'hhhNhNubj)}(h**v**h]hv}(hj2'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:99: ./include/linux/atomic/atomic-instrumented.hhM hjZ&ubeh}(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}(hjk'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjz'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg'hhhjy'hM ubh)}(h atomic64_andh]j)}(h atomic64_andh]h atomic64_and}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjg'hhhjy'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_andasbuh1hhj'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_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)}(hj|h]hv}(hj-(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubeh}(h]h ]h"]h$]h&]jjuh1j3hjg'hhhjy'hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjc'hhhjy'hM ubah}(h]j^'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjy'hM hj`'hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjV(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjS(hhubah}(h]h ]h"]h$]h&]uh1j3hj`'hhhjy'hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjn(jHjn(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_and() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjx(h]h Parameters}(hjz(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjr(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:99: ./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:99: ./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&]uh1jhjr(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjr(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}(hjM)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:99: ./include/linux/atomic/atomic-instrumented.hhM hjr(ubjM)}(h2h]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:99: ./include/linux/atomic/atomic-instrumented.hhMY hj82ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj]2h]hs64 i}(hj_2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMV hjW2ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjv2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr2hMV hjs2ubah}(h]h ]h"]h$]h&]uh1jhjW2ubeh}(h]h ]h"]h$]h&]uh1jhjr2hMV hjT2ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj2h]h atomic64_t *v}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMW hj2ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMW hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMW hjT2ubeh}(h]h ]h"]h$]h&]uh1jhj82ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMY hj82ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh & }(hj2hhhNhNubj)}(h**i**h]hi}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with relaxed ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMX hj82ubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there.}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZ hj82ubjM)}(h **Return**h]j)}(hj=3h]hReturn}(hj?3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\ hj82ubjM)}(hThe original value of **v**.h](hThe original value of }(hjS3hhhNhNubj)}(h**v**h]hv}(hj[3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS3ubh.}(hjS3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM] hj82ubeh}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMg ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMg ubh)}(hatomic64_andnoth]j)}(hatomic64_andnoth]hatomic64_andnot}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hMg ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsj3sbc.atomic64_andnotasbuh1hhj3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]hi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j3c.atomic64_andnotasbuh1hhj4ubjQ)}(h h]h }(hj;4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hjI4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hj|h]hv}(hjV4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhj3hMg ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhj3hMg ubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hMg hj3hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMg hj|4hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hMg ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjhNhNubj)}(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)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMk hj4ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj4h]hs64 i}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMh hj4ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMh hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMh hj4ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj4h]h atomic64_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMi hj4ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMi hj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMi hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubjM)}(h**Description**h]j)}(hj45h]h Description}(hj65hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj25ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMk hj4ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjJ5hhhNhNubj)}(h**v**h]hv}(hjR5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ5ubh to (}(hjJ5hhhNhNubj)}(h**v**h]hv}(hjd5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ5ubh & }(hjJ5hhhNhNubj)}(h**~i**h]h~i}(hjv5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ5ubh) with relaxed ordering.}(hjJ5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMj hj4ubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMl hj4ubjM)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMn hj4ubjM)}(hNothing.h]hNothing.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMo hj4ubeh}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnotsbc.atomic64_fetch_andnotasbuh1hhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMy ubjQ)}(h h]h }(hj 6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhj 6hMy ubh)}(hatomic64_fetch_andnoth]j)}(hj6h]hatomic64_fetch_andnot}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhj 6hMy ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj:6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj76ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<6modnameN classnameNjwjz)}j}]j6c.atomic64_fetch_andnotasbuh1hhj36ubjQ)}(h h]h }(hjX6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj36ubj)}(hjh]hi}(hjf6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj36ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/6ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j6c.atomic64_fetch_andnotasbuh1hhjz6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjz6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubj)}(hj|h]hv}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/6ubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhj 6hMy ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhj 6hMy ubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj 6hMy hj5hhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMy hj6hhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhj 6hMy ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM} hj6ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj$7h]hs64 i}(hj&7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMz hj7ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj=7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj97hMz hj:7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj97hMz hj7ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj]7h]h atomic64_t *v}(hj_7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM{ hjW7ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjv7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr7hM{ hjs7ubah}(h]h ]h"]h$]h&]uh1jhjW7ubeh}(h]h ]h"]h$]h&]uh1jhjr7hM{ hj7ubeh}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM} hj6ubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh to (}(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh & }(hj7hhhNhNubj)}(h**~i**h]h~i}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh) with full ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM| hj6ubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~ hj6ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj6ubjM)}(hThe original value of **v**.h](hThe original value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj"8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj6ubeh}(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}(hj^8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`8modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_acquiresbc.atomic64_fetch_andnot_acquireasbuh1hhjW8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW8hhhj8hM ubh)}(hatomic64_fetch_andnot_acquireh]j)}(hj|8h]hatomic64_fetch_andnot_acquire}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjW8hhhj8hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]jz8c.atomic64_fetch_andnot_acquireasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]hi}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(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}]jz8c.atomic64_fetch_andnot_acquireasbuh1hhj8ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj#9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hj|h]hv}(hj09hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hjW8hhhj8hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjS8hhhj8hM ubah}(h]jN8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hM hjP8hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjY9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjV9hhubah}(h]h ]h"]h$]h&]uh1j3hjP8hhhj8hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjq9jHjq9jIjJjKuh1hhhhjhNhNubj)}(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)}(hj{9h]h Parameters}(hj}9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj9h]hs64 i}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hj9ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj9h]h atomic64_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hj9ubeh}(h]h ]h"]h$]h&]uh1jhju9ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubjM)}(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}(hjP: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:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubjM)}(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.}(hji:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubjM)}(h **Return**h]j)}(hjz:h]hReturn}(hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hju9ubeh}(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}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_releasesbc.atomic64_fetch_andnot_releaseasbuh1hhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhj:hM ubh)}(hatomic64_fetch_andnot_releaseh]j)}(hj:h]hatomic64_fetch_andnot_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.atomic64_fetch_andnot_releaseasbuh1hhj;ubjQ)}(h h]h }(hjD;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]hi}(hjR;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}(hjm;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjo;modnameN classnameNjwjz)}j}]j:c.atomic64_fetch_andnot_releaseasbuh1hhjf;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf;ubj)}(hj|h]hv}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf;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 release orderingh]h,atomic bitwise AND NOT with release ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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_andnot_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:99: ./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:99: ./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)}(hjI<h]h atomic64_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:99: ./include/linux/atomic/atomic-instrumented.hhM hjC<ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjb<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^<hM hj_<ubah}(h]h ]h"]h$]h&]uh1jhjC<ubeh}(h]h ]h"]h$]h&]uh1jhj^<hM hj<ubeh}(h]h ]h"]h$]h&]uh1jhj;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:99: ./include/linux/atomic/atomic-instrumented.hhM hj;ubjM)}(hCAtomically 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]h~i}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj;ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_release() there.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj;ubeh}(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}(hjJ=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjL=modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_relaxedsbc.atomic64_fetch_andnot_relaxedasbuh1hhjC=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjl=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjC=hhhjk=hM ubh)}(hatomic64_fetch_andnot_relaxedh]j)}(hjh=h]hatomic64_fetch_andnot_relaxed}(hj~=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjC=hhhjk=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}]jf=c.atomic64_fetch_andnot_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}]jf=c.atomic64_fetch_andnot_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)}(hj|h]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjC=hhhjk=hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?=hhhjk=hM ubah}(h]j:=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjk=hM hj<=hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjB>hhubah}(h]h ]h"]h$]h&]uh1j3hj<=hhhjk=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_andnot_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjg>h]h Parameters}(hji>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hja>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:99: ./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:99: ./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&]uh1jhja>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:99: ./include/linux/atomic/atomic-instrumented.hhM hja>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}(hjubjM)}(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.}(hjU?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hja>ubjM)}(h **Return**h]j)}(hjf?h]hReturn}(hjh?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hja>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:99: ./include/linux/atomic/atomic-instrumented.hhM hja>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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hM ubh)}(h atomic64_orh]j)}(h atomic64_orh]h atomic64_or}(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?sb c.atomic64_orasbuh1hhj?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}(hjF@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjH@modnameN classnameNjwjz)}j}]j@ c.atomic64_orasbuh1hhj?@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)}(hj|h]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 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:99: ./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_or() 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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj@ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjAhhhNhNubah}(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"Ah]h atomic64_t *v}(hj$AhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Aubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjAubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7AhM hj8Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj7AhM hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubjM)}(h**Description**h]j)}(hj]Ah]h Description}(hj_AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Aubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj@ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjsAhhhNhNubj)}(h**v**h]hv}(hj{AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsAubh to (}(hjsAhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsAubh | }(hjsAhhhNhNubj)}(h**i**h]hi}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsAubh) with relaxed ordering.}(hjsAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj@ubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj@ubjM)}(hNothing.h]hNothing.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj@ubeh}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_orsbc.atomic64_fetch_orasbuh1hhj Bhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj3BhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Bhhhj2BhM ubh)}(hatomic64_fetch_orh]j)}(hj/Bh]hatomic64_fetch_or}(hjEBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjABubah}(h]h ](jjeh"]h$]h&]jjuh1hhj Bhhhj2BhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjcBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjeBmodnameN classnameNjwjz)}j}]j-Bc.atomic64_fetch_orasbuh1hhj\BubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\Bubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Bubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXBubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j-Bc.atomic64_fetch_orasbuh1hhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hj|h]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXBubeh}(h]h ]h"]h$]h&]jjuh1j3hj Bhhhj2BhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhj2BhM ubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2BhM hjBhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj Chhubah}(h]h ]h"]h$]h&]uh1j3hjBhhhj2BhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$CjHj$CjIjJjKuh1hhhhjhNhNubj)}(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)}(hj.Ch]h Parameters}(hj0ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Cubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(Cubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjMCh]hs64 i}(hjOChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjGCubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbChM hjcCubah}(h]h ]h"]h$]h&]uh1jhjGCubeh}(h]h ]h"]h$]h&]uh1jhjbChM hjDCubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjCubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjDCubeh}(h]h ]h"]h$]h&]uh1jhj(CubjM)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(CubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjChhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh to (}(hjChhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh | }(hjChhhNhNubj)}(h**i**h]hi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh) with full ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(CubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(CubjM)}(h **Return**h]j)}(hj-Dh]hReturn}(hj/DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Dubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(CubjM)}(hThe original value of **v**.h](hThe original value of }(hjCDhhhNhNubj)}(h**v**h]hv}(hjKDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCDubh.}(hjCDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj(Cubeh}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_acquiresbc.atomic64_fetch_or_acquireasbuh1hhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjDhM ubh)}(hatomic64_fetch_or_acquireh]j)}(hjDh]hatomic64_fetch_or_acquire}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjDhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jDc.atomic64_fetch_or_acquireasbuh1hhjDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]hi}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"EmodnameN classnameNjwjz)}j}]jDc.atomic64_fetch_or_acquireasbuh1hhjEubjQ)}(h h]h }(hj>EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjLEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hj|h]hv}(hjYEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjDhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|DhhhjDhM ubah}(h]jwDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhM hjyDhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEhhubah}(h]h ]h"]h$]h&]uh1j3hjyDhhhjDhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjEh]hs64 i}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM hjEubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjEh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjEubeh}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hj7Fh]h Description}(hj9FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Fubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjMFhhhNhNubj)}(h**v**h]hv}(hjUFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMFubh to (}(hjMFhhhNhNubj)}(h**v**h]hv}(hjgFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMFubh | }(hjMFhhhNhNubj)}(h**i**h]hi}(hjyFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMFubh) with acquire ordering.}(hjMFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubjM)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubjM)}(hThe original value of **v**.h](hThe original value of }(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjEubeh}(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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_releasesbc.atomic64_fetch_or_releaseasbuh1hhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjGhM ubh)}(hatomic64_fetch_or_releaseh]j)}(hjGh]hatomic64_fetch_or_release}(hj1GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Gubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjGhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjOGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQGmodnameN classnameNjwjz)}j}]jGc.atomic64_fetch_or_releaseasbuh1hhjHGubjQ)}(h h]h }(hjmGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHGubj)}(hjh]hi}(hj{GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDGubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]jGc.atomic64_fetch_or_releaseasbuh1hhjGubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hj|h]hv}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDGubeh}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjGhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjGhM ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhM hjFhhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjGhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhjGhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(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)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj9Hh]hs64 i}(hj;HhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7Hubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj3Hubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjRHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNHhM hjOHubah}(h]h ]h"]h$]h&]uh1jhj3Hubeh}(h]h ]h"]h$]h&]uh1jhjNHhM hj0Hubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjrHh]h atomic64_t *v}(hjtHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjlHubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jhjlHubeh}(h]h ]h"]h$]h&]uh1jhjHhM hj0Hubeh}(h]h ]h"]h$]h&]uh1jhjHubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubjM)}(hBAtomically updates **v** to (**v** | **i**) with release 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 | }(hjHhhhNhNubj)}(h**i**h]hi}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh) with release ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubjM)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubjM)}(hThe original value of **v**.h](hThe original value of }(hj/IhhhNhNubj)}(h**v**h]hv}(hj7IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Iubh.}(hj/IhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjHubeh}(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}(hjsIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjuImodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_relaxedsbc.atomic64_fetch_or_relaxedasbuh1hhjlIhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlIhhhjIhM ubh)}(hatomic64_fetch_or_relaxedh]j)}(hjIh]hatomic64_fetch_or_relaxed}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlIhhhjIhM 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}]jIc.atomic64_fetch_or_relaxedasbuh1hhjIubjQ)}(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}(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]jIc.atomic64_fetch_or_relaxedasbuh1hhjJubjQ)}(h h]h }(hj*JhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj8JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hj|h]hv}(hjEJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubeh}(h]h ]h"]h$]h&]jjuh1j3hjlIhhhjIhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhIhhhjIhM ubah}(h]jcIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhM hjeIhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjnJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjkJhhubah}(h]h ]h"]h$]h&]uh1j3hjeIhhhjIhM ubeh}(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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_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:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj9KhhhNhNubj)}(h**v**h]hv}(hjAKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Kubh to (}(hj9KhhhNhNubj)}(h**v**h]hv}(hjSKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Kubh | }(hj9KhhhNhNubj)}(h**i**h]hi}(hjeKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Kubh) with relaxed ordering.}(hj9KhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubjM)}(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~KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjJubeh}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhM ubh)}(h atomic64_xorh]j)}(h atomic64_xorh]h atomic64_xor}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhjKhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj&LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Lubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(LmodnameN classnameNjwjz)}j}]j)}jsj Lsbc.atomic64_xorasbuh1hhjLubjQ)}(h h]h }(hjFLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]hi}(hjTLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjoLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqLmodnameN classnameNjwjz)}j}]jBLc.atomic64_xorasbuh1hhjhLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhLubj)}(hj|h]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubeh}(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 XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjKhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM# hjLubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjMh]hs64 i}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj Mubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj+MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'MhM hj(Mubah}(h]h ]h"]h$]h&]uh1jhj Mubeh}(h]h ]h"]h$]h&]uh1jhj'MhM hj Mubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjKMh]h atomic64_t *v}(hjMMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM! hjEMubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjdMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`MhM! hjaMubah}(h]h ]h"]h$]h&]uh1jhjEMubeh}(h]h ]h"]h$]h&]uh1jhj`MhM! hj Mubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM# hjLubjM)}(hBAtomically updates **v** to (**v** ^ **i**) 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 ^ }(hjMhhhNhNubj)}(h**i**h]hi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh) with relaxed ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM" hjLubjM)}(hRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:RhMF hj;Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhj:RhMF hjQubeh}(h]h ]h"]h$]h&]uh1jhjQubjM)}(h**Description**h]j)}(hj`Rh]h Description}(hjbRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Rubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMH hjQubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjvRhhhNhNubj)}(h**v**h]hv}(hj~RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvRubh to (}(hjvRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvRubh ^ }(hjvRhhhNhNubj)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvRubh) with acquire ordering.}(hjvRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMG hjQubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_acquire() there.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMI hjQubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMK hjQubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhML hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_xor_release (C function)c.atomic64_fetch_xor_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_xor_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_xor_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj&ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Subah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(SmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_xor_releasesbc.atomic64_fetch_xor_releaseasbuh1hhjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMV ubjQ)}(h h]h }(hjHShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjGShMV ubh)}(hatomic64_fetch_xor_releaseh]j)}(hjDSh]hatomic64_fetch_xor_release}(hjZShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjGShMV ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjxShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzSmodnameN classnameNjwjz)}j}]jBSc.atomic64_fetch_xor_releaseasbuh1hhjqSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqSubj)}(hjh]hi}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmSubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]jBSc.atomic64_fetch_xor_releaseasbuh1hhjSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hj|h]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmSubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjGShMV ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhjGShMV ubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGShMV hjShhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj!ThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMV hjThhubah}(h]h ]h"]h$]h&]uh1j3hjShhhjGShMV ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9TjHj9TjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_xor_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjCTh]h Parameters}(hjEThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjATubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZ hj=Tubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjbTh]hs64 i}(hjdThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`Tubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMW hj\Tubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj{ThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwThMW hjxTubah}(h]h ]h"]h$]h&]uh1jhj\Tubeh}(h]h ]h"]h$]h&]uh1jhjwThMW hjYTubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjTh]h atomic64_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMX hjTubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMX hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMX hjYTubeh}(h]h ]h"]h$]h&]uh1jhj=TubjM)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZ hj=TubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh ^ }(hjThhhNhNubj)}(h**i**h]hi}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh) with release ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMY hj=TubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_release() there.}(hj1UhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[ hj=TubjM)}(h **Return**h]j)}(hjBUh]hReturn}(hjDUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Uubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM] hj=TubjM)}(hThe original value of **v**.h](hThe original value of }(hjXUhhhNhNubj)}(h**v**h]hv}(hj`UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXUubh.}(hjXUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM^ hj=Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_xor_relaxed (C function)c.atomic64_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_xor_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_xor_relaxedsbc.atomic64_fetch_xor_relaxedasbuh1hhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMi ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjUhMi ubh)}(hatomic64_fetch_xor_relaxedh]j)}(hjUh]hatomic64_fetch_xor_relaxed}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhjUhMi ubj4)}(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}]jUc.atomic64_fetch_xor_relaxedasbuh1hhjUubjQ)}(h h]h }(hj VhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]hi}(hjVhhhNhNubah}(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}(hj5VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Vubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7VmodnameN classnameNjwjz)}j}]jUc.atomic64_fetch_xor_relaxedasbuh1hhj.VubjQ)}(h h]h }(hjSVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.Vubj)}(hjh]h*}(hjaVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Vubj)}(hj|h]hv}(hjnVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Vubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjUhhhjUhMi ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjUhMi ubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMi hjUhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMi hjVhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjUhMi ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMm hjVubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMj hjVubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMj hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMj hjVubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjWh]h atomic64_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMk hj Wubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&WhMk hj'Wubah}(h]h ]h"]h$]h&]uh1jhj Wubeh}(h]h ]h"]h$]h&]uh1jhj&WhMk hjVubeh}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hjLWh]h Description}(hjNWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJWubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMm hjVubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjbWhhhNhNubj)}(h**v**h]hv}(hjjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbWubh to (}(hjbWhhhNhNubj)}(h**v**h]hv}(hj|WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbWubh ^ }(hjbWhhhNhNubj)}(h**i**h]hi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbWubh) with relaxed ordering.}(hjbWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMl hjVubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMn hjVubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMp hjVubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMq hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_xchg (C function)c.atomic64_xchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h*s64 atomic64_xchg (atomic64_t *v, s64 new)h]h)}(h)s64 atomic64_xchg(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}js atomic64_xchgsbc.atomic64_xchgasbuh1hhj Xhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM{ ubjQ)}(h h]h }(hj4XhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Xhhhj3XhM{ ubh)}(h atomic64_xchgh]j)}(hj0Xh]h atomic64_xchg}(hjFXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBXubah}(h]h ](jjeh"]h$]h&]jjuh1hhj Xhhhj3XhM{ ubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjdXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfXmodnameN classnameNjwjz)}j}]j.Xc.atomic64_xchgasbuh1hhj]XubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]Xubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Xubj)}(hj|h]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYXubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j.Xc.atomic64_xchgasbuh1hhjXubjQ)}(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&]noemphjjuh1j9hjYXubeh}(h]h ]h"]h$]h&]jjuh1j3hj Xhhhj3XhM{ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhj3XhM{ ubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3XhM{ hjXhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM{ hj Yhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhj3XhM{ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&YjHj&YjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with full ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj0Yh]h Parameters}(hj2YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Yubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj*Yubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjOYh]h atomic64_t *v}(hjQYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM| hjIYubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdYhM| hjeYubah}(h]h ]h"]h$]h&]uh1jhjIYubeh}(h]h ]h"]h$]h&]uh1jhjdYhM| hjFYubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjYh]hs64 new}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM} hjYubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhM} hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM} hjFYubeh}(h]h ]h"]h$]h&]uh1jhj*YubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj*YubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh to }(hjYhhhNhNubj)}(h**new**h]hnew}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh with full ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~ hj*YubjM)}(h=Unsafe to use in noinstr code; use raw_atomic64_xchg() there.h]h=Unsafe to use in noinstr code; use raw_atomic64_xchg() there.}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj*YubjM)}(h **Return**h]j)}(hjZh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj*YubjM)}(hThe original value of **v**.h](hThe original value of }(hj3ZhhhNhNubj)}(h**v**h]hv}(hj;ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Zubh.}(hj3ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj*Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_xchg_acquire (C function)c.atomic64_xchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_acquire (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_acquire(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjwZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjyZmodnameN classnameNjwjz)}j}]j)}jsatomic64_xchg_acquiresbc.atomic64_xchg_acquireasbuh1hhjpZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpZhhhjZhM ubh)}(hatomic64_xchg_acquireh]j)}(hjZh]hatomic64_xchg_acquire}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhjpZhhhjZhM ubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]jZc.atomic64_xchg_acquireasbuh1hhjZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hj|h]hv}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(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}]jZc.atomic64_xchg_acquireasbuh1hhj[ubjQ)}(h h]h }(hj;[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hnewh]hnew}(hjI[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubeh}(h]h ]h"]h$]h&]jjuh1j3hjpZhhhjZhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlZhhhjZhM ubah}(h]jgZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhM hjiZhhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjs[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjp[hhubah}(h]h ]h"]h$]h&]uh1j3hjiZhhhjZhM ubeh}(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. Unsafe to use in noinstr code; use raw_atomic64_xchg_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:99: ./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)}(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:99: ./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[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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj>\hhhNhNubj)}(h**v**h]hv}(hjF\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>\ubh to }(hj>\hhhNhNubj)}(h**new**h]hnew}(hjX\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:99: ./include/linux/atomic/atomic-instrumented.hhM hj[ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_xchg_acquire() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_xchg_acquire() there.}(hjq\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_xchg_release (C function)c.atomic64_xchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_release (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_release(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j)}jsatomic64_xchg_releasesbc.atomic64_xchg_releaseasbuh1hhj\hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\hhhj\hM ubh)}(hatomic64_xchg_releaseh]j)}(hj\h]hatomic64_xchg_release}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\hhhj\hM ubj4)}(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 reftargetj0]modnameN classnameNjwjz)}j}]j\c.atomic64_xchg_releaseasbuh1hhj']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)}(hj|h]hv}(hjg]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_xchg_releaseasbuh1hhj{]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 exchange with release orderingh]h%atomic exchange with release ordering}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 new`` s64 value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg_release() there. **Return** The original value of **v**.h](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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj2^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 ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjR^h]hs64 new}(hjT^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP^ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjL^ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhM hj]ubjM)}(h:Atomically updates **v** to **new** 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**new**h]hnew}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj]ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_xchg_release() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_xchg_release() there.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_xchg_relaxed (C function)c.atomic64_xchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_relaxed (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_relaxed(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjA_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjC_modnameN classnameNjwjz)}j}]j)}jsatomic64_xchg_relaxedsbc.atomic64_xchg_relaxedasbuh1hhj:_hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjc_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:_hhhjb_hM ubh)}(hatomic64_xchg_relaxedh]j)}(hj__h]hatomic64_xchg_relaxed}(hju_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:_hhhjb_hM ubj4)}(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.atomic64_xchg_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)}(hj|h]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.atomic64_xchg_relaxedasbuh1hhj_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:_hhhjb_hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6_hhhjb_hM ubah}(h]j1_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjb_hM hj3_hhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj=`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj:`hhubah}(h]h ]h"]h$]h&]uh1j3hj3_hhhjb_hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjU`jHjU`jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj_`h]h Parameters}(hja`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjx`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&]uh1jhjx`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM hju`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:99: ./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 hju`ubeh}(h]h ]h"]h$]h&]uh1jhjY`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:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`ubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh to }(hjahhhNhNubj)}(h**new**h]hnew}(hj"ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh with relaxed ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`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.}(hj;ahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`ubjM)}(h **Return**h]j)}(hjLah]hReturn}(hjNahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`ubjM)}(hThe original value of **v**.h](hThe original value of }(hjbahhhNhNubj)}(h**v**h]hv}(hjjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbaubh.}(hjbahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjY`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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchgsbc.atomic64_cmpxchgasbuh1hhjahhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjahM ubh)}(hatomic64_cmpxchgh]j)}(hjah]hatomic64_cmpxchg}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjahM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]jac.atomic64_cmpxchgasbuh1hhjaubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hj$bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hj|h]hv}(hj1bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjLbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNbmodnameN classnameNjwjz)}j}]jac.atomic64_cmpxchgasbuh1hhjEbubjQ)}(h h]h }(hjjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEbubj)}(holdh]hold}(hjxbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]jac.atomic64_cmpxchgasbuh1hhjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hnewh]hnew}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubeh}(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)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjbhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjahM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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 ch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj cubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj+ch]h atomic64_t *v}(hj-chhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj%cubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjDchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@chM hjAcubah}(h]h ]h"]h$]h&]uh1jhj%cubeh}(h]h ]h"]h$]h&]uh1jhj@chM hj"cubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjdch]hs64 old}(hjfchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj^cubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj}chhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjychM hjzcubah}(h]h ]h"]h$]h&]uh1jhj^cubeh}(h]h ]h"]h$]h&]uh1jhjychM hj"cubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hj"cubeh}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjchhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh == }(hjchhhNhNubj)}(h**old**h]hold}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh), atomically updates }(hjchhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh to }(hjchhhNhNubj)}(h**new**h]hnew}(hj,dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh with full ordering. Otherwise, }(hjchhhNhNubj)}(h**v**h]hv}(hj>dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh2 is not modified and relaxed ordering is provided.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubjM)}(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.}(hjWdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubjM)}(h **Return**h]j)}(hjhdh]hReturn}(hjjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubjM)}(hThe original value of **v**.h](hThe original value of }(hj~dhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~dubh.}(hj~dhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjcubeh}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_acquiresbc.atomic64_cmpxchg_acquireasbuh1hhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjdhM ubh)}(hatomic64_cmpxchg_acquireh]j)}(hjdh]hatomic64_cmpxchg_acquire}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjdhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)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}]jdc.atomic64_cmpxchg_acquireasbuh1hhj eubjQ)}(h h]h }(hj2ehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj eubj)}(hjh]h*}(hj@ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubj)}(hj|h]hv}(hjMehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj eubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjhehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjemodnameN classnameNjwjz)}j}]jdc.atomic64_cmpxchg_acquireasbuh1hhjaeubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaeubj)}(holdh]hold}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj eubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]jdc.atomic64_cmpxchg_acquireasbuh1hhjeubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hnewh]hnew}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj eubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjdhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjdhM ubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhM hjdhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjfhhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhjdhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjfjHjfjIjJjKuh1hhhhjhNhNubj)}(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)}(hj(fh]h Parameters}(hj*fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&fubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj"fubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjGfh]h atomic64_t *v}(hjIfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjAfubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj`fhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\fhM hj]fubah}(h]h ]h"]h$]h&]uh1jhjAfubeh}(h]h ]h"]h$]h&]uh1jhj\fhM hj>fubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjfh]hs64 old}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~fubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjzfubj)}(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&]uh1jhjzfubeh}(h]h ]h"]h$]h&]uh1jhjfhM hj>fubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjfh]hs64 new}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjfubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM hj>fubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj"fubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj ghhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubh == }(hj ghhhNhNubj)}(h**old**h]hold}(hj$ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubh), atomically updates }(hj ghhhNhNubj)}(h**v**h]hv}(hj6ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubh to }(hj ghhhNhNubj)}(h**new**h]hnew}(hjHghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubh# with acquire ordering. Otherwise, }(hj ghhhNhNubj)}(h**v**h]hv}(hjZghhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj"fubjM)}(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.}(hjsghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj"fubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj"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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj"fubeh}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_releasesbc.atomic64_cmpxchg_releaseasbuh1hhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjghM ubh)}(hatomic64_cmpxchg_releaseh]j)}(hjgh]hatomic64_cmpxchg_release}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjghM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj0hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2hmodnameN classnameNjwjz)}j}]jgc.atomic64_cmpxchg_releaseasbuh1hhj)hubjQ)}(h h]h }(hjNhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hubj)}(hjh]h*}(hj\hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hubj)}(hj|h]hv}(hjihhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%hubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jgc.atomic64_cmpxchg_releaseasbuh1hhj}hubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hubj)}(holdh]hold}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%hubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jgc.atomic64_cmpxchg_releaseasbuh1hhjhubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hnewh]hnew}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%hubeh}(h]h ]h"]h$]h&]jjuh1j3hjghhhjghM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhjghM ubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjghM hjghhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj"ihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjihhubah}(h]h ]h"]h$]h&]uh1j3hjghhhjghM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:ijHj:ijIjJjKuh1hhhhjhNhNubj)}(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)}(hjDih]h Parameters}(hjFihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>iubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjcih]h atomic64_t *v}(hjeihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj]iubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|ihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxihM hjyiubah}(h]h ]h"]h$]h&]uh1jhj]iubeh}(h]h ]h"]h$]h&]uh1jhjxihM hjZiubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjih]hs64 old}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjiubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihM hjZiubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjih]hs64 new}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjiubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihM hjZiubeh}(h]h ]h"]h$]h&]uh1jhj>iubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>iubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj&jhhhNhNubj)}(h**v**h]hv}(hj.jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&jubh == }(hj&jhhhNhNubj)}(h**old**h]hold}(hj@jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&jubh), atomically updates }(hj&jhhhNhNubj)}(h**v**h]hv}(hjRjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&jubh to }(hj&jhhhNhNubj)}(h**new**h]hnew}(hjdjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&jubh# with release ordering. Otherwise, }(hj&jhhhNhNubj)}(h**v**h]hv}(hjvjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&jubh2 is not modified and relaxed ordering is provided.}(hj&jhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>iubjM)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>iubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj>iubeh}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_relaxedsbc.atomic64_cmpxchg_relaxedasbuh1hhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhjkhM ubh)}(hatomic64_cmpxchg_relaxedh]j)}(hjkh]hatomic64_cmpxchg_relaxed}(hj.khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhjkhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjLkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNkmodnameN classnameNjwjz)}j}]jkc.atomic64_cmpxchg_relaxedasbuh1hhjEkubjQ)}(h h]h }(hjjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEkubj)}(hjh]h*}(hjxkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEkubj)}(hj|h]hv}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAkubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]jkc.atomic64_cmpxchg_relaxedasbuh1hhjkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(holdh]hold}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAkubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]jkc.atomic64_cmpxchg_relaxedasbuh1hhjkubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hnewh]hnew}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAkubeh}(h]h ]h"]h$]h&]jjuh1j3hjjhhhjkhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjkhM ubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjkhM hjjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj>lhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj;lhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjkhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVljHjVljIjJjKuh1hhhhjhNhNubj)}(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`lh]h Parameters}(hjblhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^lubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubj)}(hhh](j)}(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&]uh1jRhj}lubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjylubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjylubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjvlubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjlh]hs64 old}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjlubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjvlubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjlh]hs64 new}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjlubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM hjmubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjvlubeh}(h]h ]h"]h$]h&]uh1jhjZlubjM)}(h**Description**h]j)}(hj,mh]h Description}(hj.mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*mubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjBmhhhNhNubj)}(h**v**h]hv}(hjJmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBmubh == }(hjBmhhhNhNubj)}(h**old**h]hold}(hj\mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBmubh), atomically updates }(hjBmhhhNhNubj)}(h**v**h]hv}(hjnmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBmubh to }(hjBmhhhNhNubj)}(h**new**h]hnew}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBmubh# with relaxed ordering. Otherwise, }(hjBmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBmubh2 is not modified and relaxed ordering is provided.}(hjBmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjZlubeh}(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)}(hthhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:tubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM8 hjrubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjVthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRtubh if the exchange occurred, }(hjRthhhNhNubj)}(h **false**h]hfalse}(hjhthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRtubh otherwise.}(hjRthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM9 hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic64_try_cmpxchg_release (C function)c.atomic64_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool atomic64_try_cmpxchg_release (atomic64_t *v, s64 *old, s64 new)h]h)}(hCbool atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMD ubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjthMD ubh)}(hatomic64_try_cmpxchg_releaseh]j)}(hatomic64_try_cmpxchg_releaseh]hatomic64_try_cmpxchg_release}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjthMD ubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsjtsbc.atomic64_try_cmpxchg_releaseasbuh1hhjtubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj|h]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hj6uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3uubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8umodnameN classnameNjwjz)}j}]jtc.atomic64_try_cmpxchg_releaseasbuh1hhj/uubjQ)}(h h]h }(hjTuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/uubj)}(hjh]h*}(hjbuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/uubj)}(holdh]hold}(hjouhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]jtc.atomic64_try_cmpxchg_releaseasbuh1hhjuubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hnewh]hnew}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hjthhhjthMD ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjthMD ubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthMD hjthhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMD hjuhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjthMD ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMH hjuubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj"vh]h atomic64_t *v}(hj$vhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj vubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhME hjvubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7vhME hj8vubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhj7vhME hjvubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hj[vh]hs64 *old}(hj]vhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMF hjUvubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjtvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjpvhMF hjqvubah}(h]h ]h"]h$]h&]uh1jhjUvubeh}(h]h ]h"]h$]h&]uh1jhjpvhMF hjvubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjvh]hs64 new}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMG hjvubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMG hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMG hjvubeh}(h]h ]h"]h$]h&]uh1jhjuubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMI hjuubjM)}(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 (}(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh == }(hjvhhhNhNubj)}(h**old**h]hold}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh), atomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to }(hjvhhhNhNubj)}(h**new**h]hnew}(hj#whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh# with release ordering. Otherwise, }(hjvhhhNhNubj)}(h**v**h]hv}(hj5whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh is not modified, }(hjvhhhNhNubj)}(h**old**h]hold}(hjGwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh$ is updated to the current value of }(hjvhhhNhNubj)}(h**v**h]hv}(hjYwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh#, and relaxed ordering is provided.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMH hjuubjM)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.}(hjrwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhML hjuubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMN hjuubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh if the exchange occurred, }(hjwhhhNhNubj)}(h **false**h]hfalse}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh otherwise.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMO hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic64_try_cmpxchg_relaxed (C function)c.atomic64_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool atomic64_try_cmpxchg_relaxed (atomic64_t *v, s64 *old, s64 new)h]h)}(hCbool atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[ ubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjwhM[ ubh)}(hatomic64_try_cmpxchg_relaxedh]j)}(hatomic64_try_cmpxchg_relaxedh]hatomic64_try_cmpxchg_relaxed}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjwhM[ 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'xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)xmodnameN classnameNjwjz)}j}]j)}jsj xsbc.atomic64_try_cmpxchg_relaxedasbuh1hhj xubjQ)}(h h]h }(hjGxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj xubj)}(hjh]h*}(hjUxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj xubj)}(hj|h]hv}(hjbxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hj}xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jCxc.atomic64_try_cmpxchg_relaxedasbuh1hhjvxubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvxubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvxubj)}(holdh]hold}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jCxc.atomic64_try_cmpxchg_relaxedasbuh1hhjxubjQ)}(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&]noemphjjuh1j9hjxubeh}(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)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj(yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[ hj%yhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjwhM[ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@yjHj@yjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjJyh]h Parameters}(hjLyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHyubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM_ hjDyubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjiyh]h atomic64_t *v}(hjkyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\ hjcyubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~yhM\ hjyubah}(h]h ]h"]h$]h&]uh1jhjcyubeh}(h]h ]h"]h$]h&]uh1jhj~yhM\ hj`yubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjyh]hs64 *old}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM] hjyubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM] hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM] hj`yubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjyh]hs64 new}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM^ hjyubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM^ hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM^ hj`yubeh}(h]h ]h"]h$]h&]uh1jhjDyubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM` hjDyubjM)}(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,zhhhNhNubj)}(h**v**h]hv}(hj4zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh == }(hj,zhhhNhNubj)}(h**old**h]hold}(hjFzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh), atomically updates }(hj,zhhhNhNubj)}(h**v**h]hv}(hjXzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh to }(hj,zhhhNhNubj)}(h**new**h]hnew}(hjjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh# with relaxed ordering. Otherwise, }(hj,zhhhNhNubj)}(h**v**h]hv}(hj|zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh is not modified, }(hj,zhhhNhNubj)}(h**old**h]hold}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh$ is updated to the current value of }(hj,zhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,zubh#, and relaxed ordering is provided.}(hj,zhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM_ hjDyubjM)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMc hjDyubjM)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMe hjDyubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh if the exchange occurred, }(hjzhhhNhNubj)}(h **false**h]hfalse}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh otherwise.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMf hjDyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_sub_and_test (C function)c.atomic64_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool atomic64_sub_and_test (s64 i, atomic64_t *v)h]h)}(h0bool atomic64_sub_and_test(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hj/{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMq ubjQ)}(h h]h }(hj={hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+{hhhj<{hMq ubh)}(hatomic64_sub_and_testh]j)}(hatomic64_sub_and_testh]hatomic64_sub_and_test}(hjO{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+{hhhj<{hMq 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_sub_and_testasbuh1hhjg{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_sub_and_testasbuh1hhj{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)}(hj|h]hv}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc{ubeh}(h]h ]h"]h$]h&]jjuh1j3hj+{hhhj<{hMq ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'{hhhj<{hMq ubah}(h]j"{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<{hMq hj${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:99: ./include/linux/atomic/atomic-instrumented.hhMq hj|hhubah}(h]h ]h"]h$]h&]uh1j3hj${hhhj<{hMq ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1|jHj1|jIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMu hj5|ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract 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:99: ./include/linux/atomic/atomic-instrumented.hhMr hjT|ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjs|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjo|hMr hjp|ubah}(h]h ]h"]h$]h&]uh1jhjT|ubeh}(h]h ]h"]h$]h&]uh1jhjo|hMr 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:99: ./include/linux/atomic/atomic-instrumented.hhMs hj|ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMs hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMs 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:99: ./include/linux/atomic/atomic-instrumented.hhMu hj5|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:99: ./include/linux/atomic/atomic-instrumented.hhMt hj5|ubjM)}(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.}(hj)}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMv 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:99: ./include/linux/atomic/atomic-instrumented.hhMx hj5|ubjM)}(hF**true** if the resulting value of **v** is zero, **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 zero, }(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:99: ./include/linux/atomic/atomic-instrumented.hhMy hj5|ubeh}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj}hM ubh)}(hatomic64_dec_and_testh]j)}(hatomic64_dec_and_testh]hatomic64_dec_and_test}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsj}sbc.atomic64_dec_and_testasbuh1hhj}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)}(hj|h]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)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjT~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjQ~hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhj}hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjl~jHjl~jIjJjKuh1hhhhjhNhNubj)}(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)}(hjv~h]h Parameters}(hjx~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt~ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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~ubah}(h]h ]h"]h$]h&]uh1jhjp~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:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~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}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~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:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh if the resulting value of }(hj@hhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh is zero, }(hj@hhhNhNubj)}(h **false**h]hfalse}(hjhhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjp~ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_inc_and_testh]j)}(hatomic64_inc_and_testh]hatomic64_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjAhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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 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)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(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:99: ./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|ubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.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}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj`ubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj`ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh if the resulting value of }(hj0hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh is zero, }(hj0hhhNhNubj)}(h **false**h]hfalse}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh otherwise.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 (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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_add_negativeh]j)}(hatomic64_add_negativeh]hatomic64_add_negative}(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&]uh1jhj́ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjҁmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_add_negativeasbuh1hhjɁ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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjRhhhNhNubah}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjxhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(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&]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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh + }(hjFhhhNhNubj)}(h**i**h]hi}(hjrhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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}(hjȃhhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM ubh)}(hatomic64_add_negative_acquireh]j)}(hatomic64_add_negative_acquireh]hatomic64_add_negative_acquire}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]j)}jsj5sbc.atomic64_add_negative_acquireasbuh1hhjKubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubj:)}(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_add_negative_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjDŽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjԄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubeh}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM hj5ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjqubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hj5ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh if the resulting value of }(hj4hhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh is negative, }(hj4hhhNhNubj)}(h **false**h]hfalse}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh otherwise.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_add_negative_releaseh]j)}(hatomic64_add_negative_releaseh]hatomic64_add_negative_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}(hjԆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjцubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjֆmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_add_negative_releaseasbuh1hhj͆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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjVhhhNhNubah}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj|hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./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}(hj‡hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(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&]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)}(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:99: ./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)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh to (}(hjJhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh + }(hjJhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh) with release ordering.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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}(hj̈hhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hM ubh)}(hatomic64_add_negative_relaxedh]j)}(hatomic64_add_negative_relaxedh]hatomic64_add_negative_relaxed}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj$hM 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)}jsj9sbc.atomic64_add_negative_relaxedasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(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}]jrc.atomic64_add_negative_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjˉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj؉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubeh}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj$hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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#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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjBh]hs64 i}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhjWhM hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM hj9ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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 hj9ubeh}(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:99: ./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}(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 relaxed ordering.}(hj̊hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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&]uh1jhj8ubh if the resulting value of }(hj8hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh is negative, }(hj8hhhNhNubj)}(h **false**h]hfalse}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh otherwise.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_add_unless (C function)c.atomic64_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h;s64 atomic64_fetch_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h:s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_add_unlesssbc.atomic64_fetch_add_unlessasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic64_fetch_add_unlessh]j)}(hjh]hatomic64_fetch_add_unless}(hjЋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̋ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(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.atomic64_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_add_unlessasbuh1hhj;ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]ha}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(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.atomic64_fetch_add_unlessasbuh1hhjubjQ)}(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&]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 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:99: ./include/linux/atomic/atomic-instrumented.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 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there. **Return** The original value of **v**.h](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:99: ./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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hM hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM hjubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjXh]hs64 a}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjRubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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 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:99: ./include/linux/atomic/atomic-instrumented.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}(hjhhhNhNubah}(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}(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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic64_add_unless (C function)c.atomic64_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h6bool atomic64_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h5bool atomic64_add_unless(atomic64_t *v, s64 a, s64 u)h](j)}(hjh]hbool}(hjŎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjӎhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjҎhM ubh)}(hatomic64_add_unlessh]j)}(hatomic64_add_unlessh]hatomic64_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjҎhM ubj4)}(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)}jsjsbc.atomic64_add_unlessasbuh1hhjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](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_add_unlessasbuh1hhjSubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(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}]j c.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Ҏ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 add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_add_unless() there. **Return** **true** if **v** was updated, **false** otherwise.h](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:99: ./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)}(hj7h]h atomic64_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhM hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM hj.ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjph]hs64 a}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.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}(hjhhhNhNubah}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) 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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_inc_not_zero (C function)c.atomic64_inc_not_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h*bool atomic64_inc_not_zero (atomic64_t *v)h]h)}(h)bool atomic64_inc_not_zero(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM ubh)}(hatomic64_inc_not_zeroh]j)}(hatomic64_inc_not_zeroh]hatomic64_inc_not_zero}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_inc_not_zeroasbuh1hhj5ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hj|h]hv}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubah}(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 unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXc**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](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:99: ./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&]uh1jRhjߒubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 hjؒ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:99: ./include/linux/atomic/atomic-instrumented.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 (}(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh != 0), atomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh% + 1) with full ordering. Otherwise, }(hj2hhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh2 is not modified and relaxed ordering is provided.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM$ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic64_inc_unless_negative (C function)c.atomic64_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool atomic64_inc_unless_negative (atomic64_t *v)h]h)}(h0bool atomic64_inc_unless_negative(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM/ ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhM/ ubh)}(hatomic64_inc_unless_negativeh]j)}(hatomic64_inc_unless_negativeh]hatomic64_inc_unless_negative}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhM/ 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&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsj3sbc.atomic64_inc_unless_negativeasbuh1hhjIubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhM/ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhjhM/ ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM/ hjhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM/ hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM/ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj̔jHj̔jIjJjKuh1hhhhjhNhNubj)}(hXj**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](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:99: ./include/linux/atomic/atomic-instrumented.hhM3 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM0 hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM0 hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM0 hjubah}(h]h ]h"]h$]h&]uh1jhjДubjM)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM2 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 (}(hjFhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh >= 0), atomically updates }(hjFhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh to (}(hjFhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh% + 1) with full ordering. Otherwise, }(hjFhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh2 is not modified and relaxed ordering is provided.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM1 hjДubjM)}(hLUnsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM4 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:99: ./include/linux/atomic/atomic-instrumented.hhM6 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}(hjڕhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM7 hjДubeh}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMB ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj2hMB ubh)}(hatomic64_dec_unless_positiveh]j)}(hatomic64_dec_unless_positiveh]hatomic64_dec_unless_positive}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj2hMB ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjGsbc.atomic64_dec_unless_positiveasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubah}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj2hMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hMB ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMB hjhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjȖhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMB hjŖhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj2hMB ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMF 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMC hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMC hjubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhME 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 (}(hjZhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh <= 0), atomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh% - 1) with full ordering. Otherwise, }(hjZhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMD hjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMG 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:99: ./include/linux/atomic/atomic-instrumented.hhMI hjubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMJ hjubeh}(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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsatomic64_dec_if_positivesbc.atomic64_dec_if_positiveasbuh1hhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMU ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhj]hMU ubh)}(hatomic64_dec_if_positiveh]j)}(hjZh]hatomic64_dec_if_positive}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhj]hMU 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}]jXc.atomic64_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjǘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj5hhhj]hMU ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhj]hMU ubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]hMU hj.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMU hjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhj]hMU ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMY hj ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj1h]h atomic64_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMV hj+ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMV hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMV hj(ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMX 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) 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:99: ./include/linux/atomic/atomic-instrumented.hhMW hj ubjM)}(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.}(hjٙhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZ 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:99: ./include/linux/atomic/atomic-instrumented.hhM\ hj ubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM] hj ubeh}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMh ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjahMh ubh)}(hatomic_long_readh]j)}(hatomic_long_readh]hatomic_long_read}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjahMh ubj4)}(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)}jsjvsbc.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjahMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjahMh ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahMh hjHhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMh hjhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjahMh ubeh}(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. Unsafe to use in noinstr code; use raw_atomic_long_read() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMl hj.ubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjSh]hconst atomic_long_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMi hjMubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMi hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMi 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMk hj.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMj hj.ubjM)}(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.}(hjśhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMl 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:99: ./include/linux/atomic/atomic-instrumented.hhMn 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMo hj.ubeh}(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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMy ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj;hMy ubh)}(hatomic_long_read_acquireh]j)}(hatomic_long_read_acquireh]hatomic_long_read_acquire}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj;hMy ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjfubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubh)}(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)}jsjPsbc.atomic_long_read_acquireasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hjÜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubah}(h]h ]h"]h$]h&]jjuh1j3hj)hhhj;hMy ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj;hMy ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;hMy hj"hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMy hjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhj;hMy 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. 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM} hjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hj-h]hconst atomic_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:99: ./include/linux/atomic/atomic-instrumented.hhMz hj'ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMz hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMz hj$ubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM| hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj~hhhNhNubj)}(h**v**h]hv}(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:99: ./include/linux/atomic/atomic-instrumented.hhM{ hjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_read_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_read_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_seth]j)}(hatomic_long_seth]hatomic_long_set}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM 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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsj*sbc.atomic_long_setasbuh1hhj@ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(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&]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 set with relaxed orderingh]h atomic set with relaxed ordering}(hjߞhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjܞhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(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. Unsafe to use in noinstr code; use raw_atomic_long_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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hjYh]hlong i}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhM hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM 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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_set() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_set() there.}(hjݟhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/hhhjAhM ubh)}(hatomic_long_set_releaseh]j)}(hatomic_long_set_releaseh]hatomic_long_set_release}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/hhhjAhM 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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j)}jsjVsbc.atomic_long_set_releaseasbuh1hhjlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hj/hhhjAhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhjAhM ubah}(h]j&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhM hj(hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhjAhM 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)}(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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjFubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM hjCubj)}(h ``long i`` long value to assign 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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(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&]uh1jhj'ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj'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}(hjhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj'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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj'ubjM)}(hNothing.h]hNothing.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj'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&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjmhM ubh)}(hatomic_long_addh]j)}(hatomic_long_addh]hatomic_long_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjmhM 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)}jsjsbc.atomic_long_addasbuh1hhj̢ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj̢ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̢ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̢ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjmhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjmhM ubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmhM hjThhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj4hhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjmhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjxh]hlong i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjrubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]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:99: ./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 hjoubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubjM)}(hNothing.h]hNothing.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjSubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_add_returnh]j)}(hatomic_long_add_returnh]hatomic_long_add_return}(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}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_add_returnasbuh1hhj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj|h]hv}(hjLhhhNhNubah}(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)}(hatomic add with full orderingh]hatomic add with full ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjrhhubah}(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_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:99: ./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:99: ./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:99: ./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)}(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:99: ./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}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(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}(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.atomic_long_add_return_acquireasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(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}(hjŧhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj§hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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 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:99: ./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:99: ./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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThM hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThM hjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(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:99: ./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.}(hjըhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhjKhM ubh)}(hatomic_long_add_return_releaseh]j)}(hatomic_long_add_return_releaseh]hatomic_long_add_return_release}(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`sb c.atomic_long_add_return_releaseasbuh1hhjubjQ)}(h h]h }(hjѩhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjߩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 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:99: ./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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj)}(hhh](j)}(h``long i`` long value to add 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:99: ./include/linux/atomic/atomic-instrumented.hhM hjPubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(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:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubjM)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubjM)}(hThe updated value of **v**.h](hThe updated 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:99: ./include/linux/atomic/atomic-instrumented.hhM hj1ubeh}(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:99: ./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}(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}(hjʫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƫubjQ)}(h h]h }(hjثhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj<hhhNhNubah}(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}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjbhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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_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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjݬubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj٬ubj)}(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&]uh1jhj٬ubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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}(hjݭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٭hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj٭hhhjhM 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&]jjuh1hhj٭hhhjhM 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 }(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.atomic_long_fetch_addasbuh1hhjJubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjҭhhhjhM 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 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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjѮubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(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)}(hj/h]hatomic_long_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj)ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhM hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjѮubjM)}(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.}(hjůhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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_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)}(hubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_add_relaxedasbuh1hhj:ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hj|h]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjɴhhhj۴hMC ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjŴhhhj۴hMC ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj۴hMC hj´hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMC hjhhubah}(h]h ]h"]h$]h&]uh1j3hj´hhhj۴hMC 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_fetch_add_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:99: ./include/linux/atomic/atomic-instrumented.hhMG 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:99: ./include/linux/atomic/atomic-instrumented.hhMD hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMD hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMD 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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhME hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hME hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hME hjݵubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMG hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjphhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh to (}(hjphhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh + }(hjphhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh) with relaxed ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMF hjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMH 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:99: ./include/linux/atomic/atomic-instrumented.hhMJ 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_sub (C function)c.atomic_long_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_sub (long i, atomic_long_t *v)h]h)}(h.void atomic_long_sub(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMU ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj+hMU ubh)}(hatomic_long_subh]j)}(hatomic_long_subh]hatomic_long_sub}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj+hMU 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 }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]hi}(hjvhhhNhNubah}(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_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj̷hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj+hMU ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj+hMU ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMU 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:99: ./include/linux/atomic/atomic-instrumented.hhMU hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj+hMU ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub() there. **Return** Nothing.h](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:99: ./include/linux/atomic/atomic-instrumented.hhMY hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj6h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMV hj0ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMV hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMV hj-ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjoh]hatomic_long_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMW hjiubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMW hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMW 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:99: ./include/linux/atomic/atomic-instrumented.hhMY hjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMX hjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_sub() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZ 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:99: ./include/linux/atomic/atomic-instrumented.hhM\ hjubjM)}(hNothing.h]hNothing.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 (C function)c.atomic_long_sub_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_sub_return (long i, atomic_long_t *v)h]h)}(h5long atomic_long_sub_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMg ubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjihMg ubh)}(hatomic_long_sub_returnh]j)}(hatomic_long_sub_returnh]hatomic_long_sub_return}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjihMg 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_sub_returnasbuh1hhjȹubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjȹubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȹubj)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȹubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhjihMg ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhjihMg ubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihMg hjPhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMg hj0hhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjihMg ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return() there. **Return** The updated value of **v**.h](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:99: ./include/linux/atomic/atomic-instrumented.hhMk hjOubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjth]hlong i}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMh hjnubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMh hjkubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMi hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_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 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMk hjOubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMj hjOubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_sub_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_sub_return() there.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMl hjOubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMn hjOubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMo hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_sub_return_acquire (C function) c.atomic_long_sub_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMz ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMz ubh)}(hatomic_long_sub_return_acquireh]j)}(hatomic_long_sub_return_acquireh]hatomic_long_sub_return_acquire}(hj̻hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȻubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMz 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 reftargetj!modnameN classnameNjwjz)}j}]j)}jsjλsb c.atomic_long_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMz ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMz ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMz 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:99: ./include/linux/atomic/atomic-instrumented.hhMz hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMz 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM{ hjubj)}(hhh]jM)}(hlong value to subtracth]hlong 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.``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:99: ./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)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM~ hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire 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 - }(hjNhhhNhNubj)}(h**i**h]hi}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh) with acquire ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]hi}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_sub_return_releaseasbuh1hhjhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(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 release orderingh]h%atomic subtract with release ordering}(hjӾhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjоhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj 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:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to subtracth]hlong 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 hj 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjGubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM 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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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:99: ./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_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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhM ubh)}(hatomic_long_sub_return_relaxedh]j)}(hatomic_long_sub_return_relaxedh]hatomic_long_sub_return_relaxed}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjYhM 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)}jsjnsb c.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjYhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hj?ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjdh]hlong i}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj^ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM hj[ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]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:99: ./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 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:99: ./include/linux/atomic/atomic-instrumented.hhM hj?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:99: ./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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj?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:99: ./include/linux/atomic/atomic-instrumented.hhM hj?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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_fetch_subh]j)}(hatomic_long_fetch_subh]hatomic_long_fetch_sub}(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}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_subasbuh1hhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjJhhhNhNubah}(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 subtract with full orderingh]h"atomic subtract with full ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjphhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to subtracth]hlong 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.``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:99: ./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)}(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:99: ./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}(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 full ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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 }(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_inc_returnh]j)}(hatomic_long_inc_returnh]hatomic_long_inc_return}(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_inc_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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#atomic increment with full orderingh]h#atomic increment with full ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj;hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(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**Qh]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM hjyubj)}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM hjvubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj*hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZubeh}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubh)}(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&]jjuh1hhjghhhjyhMubj4)}(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_inc_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhjyhMubeh}(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. 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)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(hjPh]hatomic_long_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjJubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM!hj+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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hj+ubjM)}(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:99: ./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:99: ./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:99: ./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_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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM/ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhjJhM/ubh)}(hatomic_long_inc_return_releaseh]j)}(hatomic_long_inc_return_releaseh]hatomic_long_inc_return_release}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhjJhM/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&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsj_sb c.atomic_long_inc_return_releaseasbuh1hhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubah}(h]h ]h"]h$]h&]jjuh1j3hj8hhhjJhM/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhjJhM/ubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJhM/hj1hhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhjJhM/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM0hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM0hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM0hjubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM2hjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh to (}(hjrhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh + 1) with release ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM3hjubjM)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMAubh)}(hatomic_long_inc_return_relaxedh]j)}(hatomic_long_inc_return_relaxedh]hatomic_long_inc_return_relaxed}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMAubj4)}(h(atomic_long_t *v)h]j:)}(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)}jsj0sb c.atomic_long_inc_return_relaxedasbuh1hhjFubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMAhjhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMAubeh}(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:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMDhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjChhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh to (}(hjChhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh + 1) with relaxed ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMRubjQ)}(h h]h }(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_incasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjYhhhNhNubah}(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)}(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:99: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMShjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(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:99: ./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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMVhjubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMXhjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMdubh)}(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&]jjuh1hhjhhhjhMdubj4)}(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_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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 increment with acquire orderingh]h&atomic increment with acquire ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMdhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkjHjkjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhhjoubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMehjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMghjoubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMfhjoubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhhjoubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMjhjoubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMkhjoubeh}(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&]uh1jhj|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhjhMuubh)}(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&]jjuh1hhj|hhhjhMuubj4)}(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_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj|hhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhjhMuubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjuhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMuhj!hhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhjhMuubeh}(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_fetch_inc_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(hjeh]hatomic_long_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMvhj_ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMvhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMvhj\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:99: ./include/linux/atomic/atomic-instrumented.hhMxhj@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:99: ./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:99: ./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:99: ./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:99: ./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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhj_hMubh)}(hatomic_long_fetch_inc_relaxedh]j)}(hatomic_long_fetch_inc_relaxedh]hatomic_long_fetch_inc_relaxed}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhj_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)}jsjtsbc.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjMhhhj_hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhj_hMubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_hMhjFhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhj_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)}(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:99: ./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)}(hj6h]hatomic_long_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hMubh)}(hatomic_long_dech]j)}(hatomic_long_dech]hatomic_long_dec}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hMubj4)}(h(atomic_long_t *v)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_decasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj0hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj0hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMhjhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hMubeh}(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:99: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) 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 - 1) with relaxed ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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&]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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_dec_returnasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(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. 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)}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.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}(hj1hhhNhNubah}(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:99: ./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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjqhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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&]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.atomic_long_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjnjHjnjIjJjKuh1hhhhjhNhNubj)}(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)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubj)}(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:99: ./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&]uh1jhjrubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjrubeh}(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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.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)}(hj|h]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'hj{hhhjhMubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjxhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhMubeh}(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)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjhh]hatomic_long_t *v}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjbubj)}(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&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubeh}(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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjbhMubh)}(hatomic_long_dec_return_relaxedh]j)}(hatomic_long_dec_return_relaxedh]hatomic_long_dec_return_relaxed}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjbhMubj4)}(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)}jsjwsb c.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjbhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjbhMubah}(h]jGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbhMhjIhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjbhMubeh}(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_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:99: ./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)}(hj9h]hatomic_long_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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 (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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj3hMubh)}(hatomic_long_fetch_dech]j)}(hatomic_long_fetch_dech]hatomic_long_fetch_dec}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj3hMubj4)}(h(atomic_long_t *v)h]j:)}(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)}jsjHsbc.atomic_long_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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubah}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj3hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj3hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hMhjhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj3hMubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh to (}(hj[hhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(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:99: ./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:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_fetch_dec_acquireh]j)}(hatomic_long_fetch_dec_acquireh]hatomic_long_fetch_dec_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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_acquireasbuh1hhj/ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hj|h]hv}(hjqhhhNhNubah}(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:99: ./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 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:99: ./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:99: ./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:99: ./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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_releaseasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjBhhhNhNubah}(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}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhhubah}(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:99: ./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:99: ./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:99: ./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}(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:99: ./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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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&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:99: ./include/linux/atomic/atomic-instrumented.hhM$hj9hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM(hjXubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM%hjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjtubah}(h]h ]h"]h$]h&]uh1jhjXubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM'hjXubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM&hjXubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM(hjXubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM*hjXubjM)}(hThe original value of **v**.h](hThe original value of }(hj(hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+hjXubeh}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM5ubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjwhM5ubh)}(hatomic_long_andh]j)}(hatomic_long_andh]hatomic_long_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjwhM5ubj4)}(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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjehhhjwhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjwhM5ubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhM5hj^hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM5hj>hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhjwhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM9hj]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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM6hj|ubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjyubj)}(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:99: ./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&]uh1jhjhM7hjyubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhM9hj]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}(hj8hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhM8hj]ubjM)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM<hj]ubjM)}(hNothing.h]hNothing.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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_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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_andasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMGhj|hhubah}(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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMIhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhjubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh to (}(hjJhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh & }(hjJhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh) with full ordering.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMshj;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:99: ./include/linux/atomic/atomic-instrumented.hhMthj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_and_relaxed (C function)c.atomic_long_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_relaxed (long i, atomic_long_t *v)h]h)}(hh]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:99: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]jM)}(h long valueh]h long value}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjwh]hatomic_long_t *v}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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_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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqhhhjhMubh)}(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&]jjuh1hhjqhhhjhMubj4)}(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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjqhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjmhhhjhMubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(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:99: ./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:99: ./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&]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(hCAtomically 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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjDhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(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.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjiubeh}(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:99: ./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 }(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsjsb"c.atomic_long_fetch_andnot_releaseasbuh1hhj2ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hj|h]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(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:99: ./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:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(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)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) 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 & }(hjhhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh) with release ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./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:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMubh)}(h atomic_long_fetch_andnot_relaxedh]j)}(h atomic_long_fetch_andnot_relaxedh]h atomic_long_fetch_andnot_relaxed}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]hi}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubj:)}(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)}jsj8sb"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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubeh}(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,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:99: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hMubeh}(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_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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj.h]hlong i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj(ubj)}(hhh]jM)}(h long valueh]h long value}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjgh]hatomic_long_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(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&]uh1jhjaubeh}(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:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjshMubh)}(hatomic_long_orh]j)}(hatomic_long_orh]hatomic_long_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjshMubj4)}(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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjshMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjshMubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMhjZhhubj4)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjshMubeh}(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_or() there. **Return** Nothing.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:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj~h]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:99: ./include/linux/atomic/atomic-instrumented.hhMhjxubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(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:99: ./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&]uh1jhjhMhjuubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubjM)}(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}(hj4hhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubjM)}(hNothing.h]hNothing.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjYubeh}(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:99: ./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 }(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_fetch_orasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjRhhhNhNubah}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhMhjxhhubah}(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:99: ./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:99: ./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:99: ./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 hMhjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh | }(hjFhhhNhNubj)}(h**i**h]hi}(hjrhhhNhNubah}(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:99: ./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:99: ./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:99: ./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:99: ./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)}(hhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]hi}(hjLhhhNhNubah}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjimodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_or_acquireasbuh1hhj`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hj|h]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 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:99: ./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 acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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)}(hjE h]hatomic_long_t *v}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjC ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhjZ hMhj[ ubah}(h]h ]h"]h$]h&]uh1jhj? ubeh}(h]h ]h"]h$]h&]uh1jhjZ 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:99: ./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)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM+hj7 ubjM)}(hThe original value of **v**.h](hThe original value of }(hjR hhhNhNubj)}(h**v**h]hv}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh.}(hjR hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM,hj7 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_or_relaxed (C function)c.atomic_long_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhhhNhNubah}(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 relaxed ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM:hj ubjM)}(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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhM?hj ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMIubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMIubh)}(hatomic_long_xorh]j)}(hatomic_long_xorh]hatomic_long_xor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMIubj4)}(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)}jsjsbc.atomic_long_xorasbuh1hhjPubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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 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:99: ./include/linux/atomic/atomic-instrumented.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMIubeh}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMJhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhj/ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMKhjubeh}(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:99: ./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:99: ./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:99: ./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:99: ./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:99: ./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&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hM[ubh)}(hatomic_long_fetch_xorh]j)}(hatomic_long_fetch_xorh]hatomic_long_fetch_xor}(hjBhhhNhNubah}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]hi}(hjzhhhNhNubah}(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_xorasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubeh}(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 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:99: ./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 ``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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM_hjubj)}(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&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\hj4ubj)}(hhh]jM)}(h long valueh]h long value}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhM\hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM\hj1ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjsh]hatomic_long_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM]hjmubj)}(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&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM]hj1ubeh}(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:99: ./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}(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:99: ./include/linux/atomic/atomic-instrumented.hhM^hjubjM)}(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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMbhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMchjubeh}(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}(hj]#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjl#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY#hhhjk#hMubh)}(hatomic_long_cmpxchgh]j)}(hatomic_long_cmpxchgh]hatomic_long_cmpxchg}(hj~#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjY#hhhjk#hMubj4)}(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#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsj#sbc.atomic_long_cmpxchgasbuh1hhj#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)}(hj|h]hv}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(hlong 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)}(holdh]hold}(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 }(hj3$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!$ubj)}(hnewh]hnew}(hjA$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubeh}(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 compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjk$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjh$hhubah}(h]h ]h"]h$]h&]uh1j3hjR#hhhjk#hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./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)}(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:99: ./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 old`` long value to compare with h](j)}(h ``long old``h]jS)}(hj$h]hlong 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj)}(hhh]jM)}(hlong value to compare withh]hlong 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj7%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3%hMhj4%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj3%hMhj$ubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjo%hhhNhNubj)}(h**v**h]hv}(hjw%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo%ubh == }(hjo%hhhNhNubj)}(h**old**h]hold}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo%ubh), atomically updates }(hjo%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo%ubh to }(hjo%hhhNhNubj)}(h**new**h]hnew}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo%ubh with full ordering. Otherwise, }(hjo%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo%ubh2 is not modified and relaxed ordering is provided.}(hjo%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj$ubeh}(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&]uh1jhj<&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjO&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<&hhhjN&hMubh)}(hatomic_long_cmpxchg_acquireh]j)}(hatomic_long_cmpxchg_acquireh]hatomic_long_cmpxchg_acquire}(hja&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<&hhhjN&hMubj4)}(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&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j)}jsjc&sbc.atomic_long_cmpxchg_acquireasbuh1hhjy&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)}(hj|h]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hju&ubj:)}(hlong 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)}(holdh]hold}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hju&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&]noemphjjuh1j9hju&ubeh}(h]h ]h"]h$]h&]jjuh1j3hj<&hhhjN&hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8&hhhjN&hMubah}(h]j3&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjN&hMhj5&hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjN'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjK'hhubah}(h]h ]h"]h$]h&]uh1j3hj5&hhhjN&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjf'jHjf'jIjJjKuh1hhhhjhNhNubj)}(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)}(hjp'h]h Parameters}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjj'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:99: ./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 old`` long value to compare with h](j)}(h ``long old``h]jS)}(hj'h]hlong 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj'ubj)}(hhh]jM)}(hlong value to compare withh]hlong 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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&]uh1jhjj'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:99: ./include/linux/atomic/atomic-instrumented.hhM hjj'ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjR(hhhNhNubj)}(h**v**h]hv}(hjZ(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR(ubh == }(hjR(hhhNhNubj)}(h**old**h]hold}(hjl(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR(ubh), atomically updates }(hjR(hhhNhNubj)}(h**v**h]hv}(hj~(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR(ubh to }(hjR(hhhNhNubj)}(h**new**h]hnew}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR(ubh# with acquire ordering. Otherwise, }(hjR(hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR(ubh2 is not modified and relaxed ordering is provided.}(hjR(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjj'ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM hjj'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:99: ./include/linux/atomic/atomic-instrumented.hhM hjj'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:99: ./include/linux/atomic/atomic-instrumented.hhMhjj'ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj2)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj1)hMubh)}(hatomic_long_cmpxchg_releaseh]j)}(hatomic_long_cmpxchg_releaseh]hatomic_long_cmpxchg_release}(hjD)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj1)hMubj4)}(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}(hjc)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetje)modnameN classnameNjwjz)}j}]j)}jsjF)sbc.atomic_long_cmpxchg_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)}(hj|h]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjX)ubj:)}(hlong 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)}(holdh]hold}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjX)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&]noemphjjuh1j9hjX)ubeh}(h]h ]h"]h$]h&]jjuh1j3hj)hhhj1)hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj1)hMubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1)hMhj)hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj1*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj.*hhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhj1)hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjI*jHjI*jIjJjKuh1hhhhjhNhNubj)}(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)}(hjS*h]h Parameters}(hjU*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjM*ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjr*h]hatomic_long_t *v}(hjt*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjp*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjl*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&]uh1jhjl*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhji*ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hj*h]hlong 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:99: ./include/linux/atomic/atomic-instrumented.hhMhj*ubj)}(hhh]jM)}(hlong value to compare withh]hlong 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*hMhji*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:99: ./include/linux/atomic/atomic-instrumented.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*hMhji*ubeh}(h]h ]h"]h$]h&]uh1jhjM*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:99: ./include/linux/atomic/atomic-instrumented.hhMhjM*ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj5+hhhNhNubj)}(h**v**h]hv}(hj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5+ubh == }(hj5+hhhNhNubj)}(h**old**h]hold}(hjO+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5+ubh), atomically updates }(hj5+hhhNhNubj)}(h**v**h]hv}(hja+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5+ubh to }(hj5+hhhNhNubj)}(h**new**h]hnew}(hjs+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5+ubh# with release ordering. Otherwise, }(hj5+hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5+ubh2 is not modified and relaxed ordering is provided.}(hj5+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjM*ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjM*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:99: ./include/linux/atomic/atomic-instrumented.hhM!hjM*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:99: ./include/linux/atomic/atomic-instrumented.hhM"hjM*ubeh}(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&]uh1jhj,hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM-ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj,hM-ubh)}(hatomic_long_cmpxchg_relaxedh]j)}(hatomic_long_cmpxchg_relaxedh]hatomic_long_cmpxchg_relaxed}(hj',hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj,hM-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}(hjF,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjH,modnameN classnameNjwjz)}j}]j)}jsj),sbc.atomic_long_cmpxchg_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)}(hj|h]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;,ubj:)}(hlong 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)}(holdh]hold}(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&]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 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:99: ./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** ``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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM1hj0-ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjU-h]hatomic_long_t *v}(hjW-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM.hjO-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hj-h]hlong 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:99: ./include/linux/atomic/atomic-instrumented.hhM/hj-ubj)}(hhh]jM)}(hlong value to compare withh]hlong 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/hjL-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:99: ./include/linux/atomic/atomic-instrumented.hhM0hj-ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hM0hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM0hjL-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:99: ./include/linux/atomic/atomic-instrumented.hhM2hj0-ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed 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}(hj2.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh), atomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hjD.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to }(hj.hhhNhNubj)}(h**new**h]hnew}(hjV.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh# with relaxed ordering. Otherwise, }(hj.hhhNhNubj)}(h**v**h]hv}(hjh.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:99: ./include/linux/atomic/atomic-instrumented.hhM1hj0-ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM4hj0-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:99: ./include/linux/atomic/atomic-instrumented.hhM6hj0-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:99: ./include/linux/atomic/atomic-instrumented.hhM7hj0-ubeh}(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:99: ./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}(hj(/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*/modnameN classnameNjwjz)}j}]j)}jsj /sbc.atomic_long_try_cmpxchgasbuh1hhj!/ubjQ)}(h h]h }(hjH/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!/ubj)}(hjh]h*}(hjV/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!/ubj)}(hj|h]hv}(hjc/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(h long *oldh](j)}(hlongh]hlong}(hj{/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw/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)}(holdh]hold}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw/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&]jjuh1j3hj.hhhj.hMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhj.hMAubah}(h]j.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMAhj.hhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMAhj0hhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhj.hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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)}(hj%0h]h Parameters}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMEhj0ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjD0h]hatomic_long_t *v}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjB0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMBhj>0ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj]0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjY0hMBhjZ0ubah}(h]h ]h"]h$]h&]uh1jhj>0ubeh}(h]h ]h"]h$]h&]uh1jhjY0hMBhj;0ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj}0h]h long *old}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMChjw0ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMChj0ubah}(h]h ]h"]h$]h&]uh1jhjw0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMChj;0ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj0h]hlong new}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMDhj0ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMDhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMDhj;0ubeh}(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:99: ./include/linux/atomic/atomic-instrumented.hhMFhj0ubjM)}(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 (}(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh == }(hj1hhhNhNubj)}(h**old**h]hold}(hj!1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh), atomically updates }(hj1hhhNhNubj)}(h**v**h]hv}(hj31hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh to }(hj1hhhNhNubj)}(h**new**h]hnew}(hjE1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh with full ordering. Otherwise, }(hj1hhhNhNubj)}(h**v**h]hv}(hjW1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh is not modified, }(hj1hhhNhNubj)}(h**old**h]hold}(hji1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh$ is updated to the current value of }(hj1hhhNhNubj)}(h**v**h]hv}(hj{1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh#, and relaxed ordering is provided.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMEhj0ubjM)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMIhj0ubjM)}(h **Return**h]j)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMKhj0ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh if the exchange occurred, }(hj1hhhNhNubj)}(h **false**h]hfalse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh otherwise.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMLhj0ubeh}(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 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMXubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hMXubh)}(hatomic_long_try_cmpxchg_acquireh]j)}(hatomic_long_try_cmpxchg_acquireh]hatomic_long_try_cmpxchg_acquire}(hj*2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhj2hMXubj4)}(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}(hjI2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjK2modnameN classnameNjwjz)}j}]j)}jsj,2sb!c.atomic_long_try_cmpxchg_acquireasbuh1hhjB2ubjQ)}(h h]h }(hji2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB2ubj)}(hjh]h*}(hjw2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB2ubj)}(hj|h]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>2ubj:)}(h long *oldh](j)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(holdh]hold}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>2ubj:)}(hlong newh](j)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hnewh]hnew}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>2ubeh}(h]h ]h"]h$]h&]jjuh1j3hj2hhhj2hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj2hMXubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMXhj1hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMXhj!3hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj2hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<3jHj<3jIjJjKuh1hhhhjhNhNubj)}(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)}(hjF3h]h Parameters}(hjH3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\hj@3ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hje3h]hatomic_long_t *v}(hjg3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjc3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMYhj_3ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjz3hMYhj{3ubah}(h]h ]h"]h$]h&]uh1jhj_3ubeh}(h]h ]h"]h$]h&]uh1jhjz3hMYhj\3ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj3h]h long *old}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZhj3ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMZhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMZhj\3ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj3h]hlong new}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[hj3ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM[hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM[hj\3ubeh}(h]h ]h"]h$]h&]uh1jhj@3ubjM)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM]hj@3ubjM)}(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(4hhhNhNubj)}(h**v**h]hv}(hj04hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh == }(hj(4hhhNhNubj)}(h**old**h]hold}(hjB4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh), atomically updates }(hj(4hhhNhNubj)}(h**v**h]hv}(hjT4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh to }(hj(4hhhNhNubj)}(h**new**h]hnew}(hjf4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh# with acquire ordering. Otherwise, }(hj(4hhhNhNubj)}(h**v**h]hv}(hjx4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh is not modified, }(hj(4hhhNhNubj)}(h**old**h]hold}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh$ is updated to the current value of }(hj(4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(4ubh#, and relaxed ordering is provided.}(hj(4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\hj@3ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM`hj@3ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMbhj@3ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh if the exchange occurred, }(hj4hhhNhNubj)}(h **false**h]hfalse}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh otherwise.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMchj@3ubeh}(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}(hj+5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMnubjQ)}(h h]h }(hj95hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'5hhhj85hMnubh)}(hatomic_long_try_cmpxchg_releaseh]j)}(hatomic_long_try_cmpxchg_releaseh]hatomic_long_try_cmpxchg_release}(hjK5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'5hhhj85hMnubj4)}(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}(hjj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjl5modnameN classnameNjwjz)}j}]j)}jsjM5sb!c.atomic_long_try_cmpxchg_releaseasbuh1hhjc5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjc5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc5ubj)}(hj|h]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_5ubj:)}(h long *oldh](j)}(hlongh]hlong}(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)}(holdh]hold}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_5ubj:)}(hlong newh](j)}(hlongh]hlong}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hj 6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hnewh]hnew}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj'5hhhj85hMnubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#5hhhj85hMnubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj85hMnhj 5hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjE6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMnhjB6hhubah}(h]h ]h"]h$]h&]uh1j3hj 5hhhj85hMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]6jHj]6jIjJjKuh1hhhhjhNhNubj)}(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)}(hjg6h]h Parameters}(hji6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMrhja6ubj)}(hhh](j)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMohj6ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMohj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMohj}6ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj6h]h long *old}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMphj6ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMphj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMphj}6ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj6h]hlong new}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMqhj6ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 7hMqhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMqhj}6ubeh}(h]h ]h"]h$]h&]uh1jhja6ubjM)}(h**Description**h]j)}(hj37h]h Description}(hj57hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj17ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMshja6ubjM)}(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 (}(hjI7hhhNhNubj)}(h**v**h]hv}(hjQ7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh == }(hjI7hhhNhNubj)}(h**old**h]hold}(hjc7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh), atomically updates }(hjI7hhhNhNubj)}(h**v**h]hv}(hju7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh to }(hjI7hhhNhNubj)}(h**new**h]hnew}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh# with release ordering. Otherwise, }(hjI7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh is not modified, }(hjI7hhhNhNubj)}(h**old**h]hold}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh$ is updated to the current value of }(hjI7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh#, and relaxed ordering is provided.}(hjI7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMrhja6ubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMvhja6ubjM)}(h **Return**h]j)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMxhja6ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh if the exchange occurred, }(hj7hhhNhNubj)}(h **false**h]hfalse}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh otherwise.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMyhja6ubeh}(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}(hjL8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjZ8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH8hhhjY8hMubh)}(hatomic_long_try_cmpxchg_relaxedh]j)}(hatomic_long_try_cmpxchg_relaxedh]hatomic_long_try_cmpxchg_relaxed}(hjl8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjH8hhhjY8hMubj4)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsjn8sb!c.atomic_long_try_cmpxchg_relaxedasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hj|h]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(h long *oldh](j)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(holdh]hold}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(hlong newh](j)}(hlongh]hlong}(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjQ)}(h h]h }(hj.9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hnewh]hnew}(hj<9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hjH8hhhjY8hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjD8hhhjY8hMubah}(h]j?8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjY8hMhjA8hhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjc9hhubah}(h]h ]h"]h$]h&]uh1j3hjA8hhhjY8hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~9jHj~9jIjJjKuh1hhhhjhNhNubj)}(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)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj9h]hatomic_long_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj9h]h long *old}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj9ubah}(h]h P]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj2:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.:hMhj/:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj.:hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hjT:h]h Description}(hjV:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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 (}(hjj:hhhNhNubj)}(h**v**h]hv}(hjr:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh == }(hjj:hhhNhNubj)}(h**old**h]hold}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh), atomically updates }(hjj:hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh to }(hjj:hhhNhNubj)}(h**new**h]hnew}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh# with relaxed ordering. Otherwise, }(hjj:hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh is not modified, }(hjj:hhhNhNubj)}(h**old**h]hold}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh$ is updated to the current value of }(hjj:hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubh#, and relaxed ordering is provided.}(hjj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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}(hj4;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:99: ./include/linux/atomic/atomic-instrumented.hhMhj9ubeh}(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}(hjm;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj{;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhji;hhhjz;hMubh)}(hatomic_long_sub_and_testh]j)}(hatomic_long_sub_and_testh]hatomic_long_sub_and_test}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1hhji;hhhjz;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.atomic_long_sub_and_testasbuh1hhj;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)}(hj|h]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubeh}(h]h ]h"]h$]h&]jjuh1j3hji;hhhjz;hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hje;hhhjz;hMubah}(h]j`;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjz;hMhjb;hhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjD<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjA<hhubah}(h]h ]h"]h$]h&]uh1j3hjb;hhhjz;hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\<jHj\<jIjJjKuh1hhhhjhNhNubj)}(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)}(hjf<h]h Parameters}(hjh<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd<ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj`<ubj)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj)}(hhh]jM)}(hlong value to subtracth]hlong 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_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:99: ./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)}(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:99: ./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:99: ./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.}(hjT=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj`<ubjM)}(h **Return**h]j)}(hje=h]hReturn}(hjg=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(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}(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:99: ./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}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhj=hMubh)}(hatomic_long_dec_and_testh]j)}(hatomic_long_dec_and_testh]hatomic_long_dec_and_test}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhj=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_and_testasbuh1hhj>ubjQ)}(h h]h }(hj;>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjI>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hj|h]hv}(hjV>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)}(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:99: ./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 **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)}(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:99: ./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)}(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:99: ./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>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:99: ./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:99: ./include/linux/atomic/atomic-instrumented.hhMhj>ubjM)}(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.}(hjD?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj>ubjM)}(h **Return**h]j)}(hjU?h]hReturn}(hjW?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjo?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk?ubh if the resulting value of }(hjk?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk?ubh is zero, }(hjk?hhhNhNubj)}(h **false**h]hfalse}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk?ubh otherwise.}(hjk?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj>ubeh}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hMubh)}(hatomic_long_inc_and_testh]j)}(hatomic_long_inc_and_testh]hatomic_long_inc_and_test}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhj?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_inc_and_testasbuh1hhj@ubjQ)}(h h]h }(hj+@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hj9@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hj|h]hv}(hjF@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)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjo@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.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 **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)}(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:99: ./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)}(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:99: ./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@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:99: ./include/linux/atomic/atomic-instrumented.hhMhj@ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjAhhhNhNubj)}(h**v**h]hv}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh to (}(hjAhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhj@ubjM)}(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.}(hj4AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj@ubjM)}(h **Return**h]j)}(hjEAh]hReturn}(hjGAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hj_AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Aubh if the resulting value of }(hj[AhhhNhNubj)}(h**v**h]hv}(hjqAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Aubh is zero, }(hj[AhhhNhNubj)}(h **false**h]hfalse}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Aubh otherwise.}(hj[AhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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 (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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjAhMubh)}(hatomic_long_add_negativeh]j)}(hatomic_long_add_negativeh]hatomic_long_add_negative}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjAhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj/BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1BmodnameN classnameNjwjz)}j}]j)}jsjAsbc.atomic_long_add_negativeasbuh1hhj(BubjQ)}(h h]h }(hjOBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(Bubj)}(hjh]h*}(hj]BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Bubj)}(hj|h]hv}(hjjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Bubeh}(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)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBhhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjAhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(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)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjBh]hlong i}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj Ch]hatomic_long_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:99: ./include/linux/atomic/atomic-instrumented.hhMhjCubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&ChhhNhNubah}(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)}(hjHCh]h Description}(hjJChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj^ChhhNhNubj)}(h**v**h]hv}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Cubh to (}(hj^ChhhNhNubj)}(h**v**h]hv}(hjxChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Cubh + }(hj^ChhhNhNubj)}(h**i**h]hi}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Cubh) with full ordering.}(hj^ChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh if the resulting value of }(hjChhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh is negative, }(hjChhhNhNubj)}(h **false**h]hfalse}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh otherwise.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(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}(hj+DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Dhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj9DhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'Dhhhj8DhMubh)}(h atomic_long_add_negative_acquireh]j)}(h atomic_long_add_negative_acquireh]h atomic_long_add_negative_acquire}(hjKDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'Dhhhj8DhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjgDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcDubjQ)}(h h]h }(hjuDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcDubj)}(hjh]hi}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_Dubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j)}jsjMDsb"c.atomic_long_add_negative_acquireasbuh1hhjDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hj|h]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_Dubeh}(h]h ]h"]h$]h&]jjuh1j3hj'Dhhhj8DhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#Dhhhj8DhMubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8DhMhj Dhhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hj Dhhhj8DhMubeh}(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 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$Eh]h Parameters}(hj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Eubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjCEh]hlong i}(hjEEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhj=Eubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj\EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXEhMhjYEubah}(h]h ]h"]h$]h&]uh1jhj=Eubeh}(h]h ]h"]h$]h&]uh1jhjXEhMhj:Eubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj|Eh]hatomic_long_t *v}(hj~EhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjvEubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjvEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj:Eubeh}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjEhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh to (}(hjEhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh + }(hjEhhhNhNubj)}(h**i**h]hi}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh) with acquire ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(h **Return**h]j)}(hj#Fh]hReturn}(hj%FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Fubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj=FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Fubh if the resulting value of }(hj9FhhhNhNubj)}(h**v**h]hv}(hjOFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Fubh is negative, }(hj9FhhhNhNubj)}(h **false**h]hfalse}(hjaFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Fubh otherwise.}(hj9FhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjEubeh}(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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjFhMubh)}(h atomic_long_add_negative_releaseh]j)}(h atomic_long_add_negative_releaseh]h atomic_long_add_negative_release}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjFhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]hi}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjFsb"c.atomic_long_add_negative_releaseasbuh1hhjGubjQ)}(h h]h }(hj-GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hj;GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hj|h]hv}(hjHGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubeh}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjFhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjFhMubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhMhjFhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjqGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjnGhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhjFhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjhNhNubj)}(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)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjGh]hlong i}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjGubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjGh]hatomic_long_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubeh}(h]h ]h"]h$]h&]uh1jhjGubjM)}(h**Description**h]j)}(hj&Hh]h Description}(hj(HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Hubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjGubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjbool 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}(hjkNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hjyNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgNhhhjxNhM1ubh)}(hatomic_long_add_unlessh]j)}(hatomic_long_add_unlessh]hatomic_long_add_unless}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhjgNhhhjxNhM1ubj4)}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjNsbc.atomic_long_add_unlessasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hj|h]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hlong ah](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hj OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]ha}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hlong uh](j)}(hlongh]hlong}(hj1OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-OubjQ)}(h h]h }(hj?OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-Oubj)}(hjlh]hu}(hjMOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Oubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjgNhhhjxNhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjcNhhhjxNhM1ubah}(h]j^Nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxNhM1hj`Nhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjvOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM1hjsOhhubah}(h]h ]h"]h$]h&]uh1j3hj`NhhhjxNhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM5hjOubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjOh]hatomic_long_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM2hjOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhM2hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM2hjOubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hjOh]hlong a}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM3hjOubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM3hjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhM3hjOubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hj)Ph]hlong u}(hj+PhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'Pubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM4hj#Pubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjBPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>PhM4hj?Pubah}(h]h ]h"]h$]h&]uh1jhj#Pubeh}(h]h ]h"]h$]h&]uh1jhj>PhM4hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjdPh]h Description}(hjfPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM6hjOubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjzPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh != }(hjzPhhhNhNubj)}(h**u**h]hu}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh), atomically updates }(hjzPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh to (}(hjzPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh + }(hjzPhhhNhNubj)}(h**a**h]ha}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh!) with full ordering. Otherwise, }(hjzPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubh2 is not modified and relaxed ordering is provided.}(hjzPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM5hjOubjM)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM8hjOubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhM:hjOubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh if }(hjQhhhNhNubj)}(h**v**h]hv}(hj2QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh was updated, }(hjQhhhNhNubj)}(h **false**h]hfalse}(hjDQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh otherwise.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM;hjOubeh}(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}QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMFubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyQhhhjQhMFubh)}(hatomic_long_inc_not_zeroh]j)}(hatomic_long_inc_not_zeroh]hatomic_long_inc_not_zero}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyQhhhjQhMFubj4)}(h(atomic_long_t *v)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 reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjQsbc.atomic_long_inc_not_zeroasbuh1hhjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hj|h]hv}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubah}(h]h ]h"]h$]h&]jjuh1j3hjyQhhhjQhMFubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuQhhhjQhMFubah}(h]jpQah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhMFhjrQhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMFhjRhhubah}(h]h ]h"]h$]h&]uh1j3hjrQhhhjQhMFubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8RjHj8RjIjJjKuh1hhhhjhNhNubj)}(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)}(hjBRh]h Parameters}(hjDRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Rubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMJhj= 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)}(hjVTh]h Parameters}(hjXThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM]hjPTubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjuTh]hatomic_long_t *v}(hjwThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMZhjoTubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMZhjTubah}(h]h ]h"]h$]h&]uh1jhjoTubeh}(h]h ]h"]h$]h&]uh1jhjThMZhjlTubah}(h]h ]h"]h$]h&]uh1jhjPTubjM)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM\hjPTubjM)}(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}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh2 is not modified and relaxed ordering is provided.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM[hjPTubjM)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM^hjPTubjM)}(h **Return**h]j)}(hj.Uh]hReturn}(hj0UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Uubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhM`hjPTubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjHUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDUubh if }(hjDUhhhNhNubj)}(h**v**h]hv}(hjZUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDUubh was updated, }(hjDUhhhNhNubj)}(h **false**h]hfalse}(hjlUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDUubh otherwise.}(hjDUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMahjPTubeh}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjUhMlubh)}(hatomic_long_dec_unless_positiveh]j)}(hatomic_long_dec_unless_positiveh]hatomic_long_dec_unless_positive}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhjUhMlubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjUsb!c.atomic_long_dec_unless_positiveasbuh1hhjUubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hj|h]hv}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubah}(h]h ]h"]h$]h&]jjuh1j3hjUhhhjUhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjUhMlubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMlhjUhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjHVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMlhjEVhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjUhMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`VjHj`VjIjJjKuh1hhhhjhNhNubj)}(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)}(hjjVh]h Parameters}(hjlVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMphjdVubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjVh]hatomic_long_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMmhjVubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMmhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMmhjVubah}(h]h ]h"]h$]h&]uh1jhjdVubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMohjdVubjM)}(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}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh% - 1) with full ordering. Otherwise, }(hjVhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh2 is not modified and relaxed ordering is provided.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMnhjdVubjM)}(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.}(hj1WhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMqhjdVubjM)}(h **Return**h]j)}(hjBWh]hReturn}(hjDWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Wubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMshjdVubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj\WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXWubh if }(hjXWhhhNhNubj)}(h**v**h]hv}(hjnWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXWubh was updated, }(hjXWhhhNhNubj)}(h **false**h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXWubh otherwise.}(hjXWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMthjdVubeh}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhMubh)}(hatomic_long_dec_if_positiveh]j)}(hatomic_long_dec_if_positiveh]hatomic_long_dec_if_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)}jsjWsbc.atomic_long_dec_if_positiveasbuh1hhjWubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hj'XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hj|h]hv}(hj4XhhhNhNubah}(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)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj]XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjZXhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjuXjHjuXjIjJjKuh1hhhhjhNhNubj)}(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)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Xubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubj)}(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&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjyXubjM)}(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:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubjM)}(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}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh% - 1) with full ordering. Otherwise, }(hjXhhhNhNubj)}(h**v**h]hv}(hj-YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh2 is not modified and relaxed ordering is provided.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubjM)}(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.}(hjFYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubjM)}(h **Return**h]j)}(hjWYh]hReturn}(hjYYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjmYhhhNhNubj)}(h**v**h]hv}(hjuYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmYubh - 1), regardless of whether }(hjmYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmYubh was updated.}(hjmYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-instrumented.hhMhjyXubeh}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMubh)}(hraw_atomic_readh]j)}(hraw_atomic_readh]hraw_atomic_read}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hj h]hconst}(hjYhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hj ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(hatomic_th]hatomic_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.raw_atomic_readasbuh1hhjYubjQ)}(h h]h }(hj;ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjIZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hj|h]hv}(hjVZhhhNhNubah}(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 load with relaxed orderingh]h!atomic load with relaxed ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj|Zhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjZh]hconst atomic_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_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&]uh1jhjZubjM)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubjM)}(hhj[ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubh)}(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_read_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)}(hj|h]hv}(hj0\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 load with acquire orderingh]h!atomic load with acquire ordering}(hjY\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjV\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjq\jHjq\jIjJjKuh1hhhhjhNhNubj)}(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)}(hj{\h]h Parameters}(hj}\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy\ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hj\h]hconst atomic_t *v}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhju\ubjM)}(h**Description**h]j)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj\hhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh with acquire ordering.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubjM)}(hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hj3]hhhNhNubj)}(h**v**h]hv}(hj;]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3]ubh.}(hj3]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju\ubeh}(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}(hjt]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp]hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp]hhhj]hMubh)}(hraw_atomic_seth]j)}(hraw_atomic_seth]hraw_atomic_set}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjp]hhhj]hMubj4)}(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&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]j)}jsj]sbc.raw_atomic_setasbuh1hhj]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)}(hj|h]hv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubj:)}(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]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 set with relaxed orderingh]h atomic set with relaxed ordering}(hjL^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjI^hhubah}(h]h ]h"]h$]h&]uh1j3hji]hhhj]hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjd^jHjd^jIjJjKuh1hhhhjhNhNubj)}(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)}(hjn^h]h Parameters}(hjp^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl^ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjh^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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjh^ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjh^ubjM)}(h5Atomically sets **v** to **i** with relaxed 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}(hj1_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh with relaxed ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjh^ubjM)}(h;Safe to use in noinstr code; prefer atomic_set() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_set() elsewhere.}(hjJ_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjh^ubjM)}(h **Return**h]j)}(hj[_h]hReturn}(hj]_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY_ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjh^ubjM)}(hNothing.h]hNothing.}(hjq_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhj_hMubh)}(hraw_atomic_set_releaseh]j)}(hraw_atomic_set_releaseh]hraw_atomic_set_release}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhj_hMubj4)}(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&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]j)}jsj_sbc.raw_atomic_set_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)}(hj|h]hv}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_ubj:)}(hint ih](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)}(hjh]hi}(hjO`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 set with release orderingh]h atomic set with release ordering}(hjx`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhju`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 ``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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hj-ah]h Description}(hj/ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+aubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjCahhhNhNubj)}(h**v**h]hv}(hjKahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCaubh to }(hjCahhhNhNubj)}(h**i**h]hi}(hj]ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCaubh with release ordering.}(hjCahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjvahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(h **Return**h]j)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj`ubjM)}(hNothing.h]hNothing.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjahMubh)}(hraw_atomic_addh]j)}(hraw_atomic_addh]hraw_atomic_add}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjahMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]hi}(hj%bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj@bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBbmodnameN classnameNjwjz)}j}]j)}jsjasbc.raw_atomic_addasbuh1hhj9bubjQ)}(h h]h }(hj`bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9bubj)}(hjh]h*}(hjnbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9bubj)}(hj|h]hv}(hj{bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9bubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubeh}(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 add with relaxed orderingh]h atomic add with relaxed ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjahMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(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)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjbh]hint i}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjch]h atomic_t *v}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7chhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3chMhj4cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj3chMhjbubeh}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hjYch]h Description}(hj[chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWcubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjochhhNhNubj)}(h**v**h]hv}(hjwchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjocubh to (}(hjochhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjocubh + }(hjochhhNhNubj)}(h**i**h]hi}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjocubh) with relaxed ordering.}(hjochhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(h;Safe to use in noinstr code; prefer atomic_add() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_add() elsewhere.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hNothing.h]hNothing.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubeh}(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 dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM&ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjdhM&ubh)}(hraw_atomic_add_returnh]j)}(hraw_atomic_add_returnh]hraw_atomic_add_return}(hj+dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'dubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjdhM&ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjGdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCdubjQ)}(h h]h }(hjUdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCdubj)}(hjh]hi}(hjcdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?dubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj~dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{dubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsj-dsbc.raw_atomic_add_returnasbuh1hhjwdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwdubj)}(hj|h]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?dubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjdhM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjdhM&ubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhM&hjchhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM&hjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhjdhM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM*hjdubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj#eh]hint i}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!eubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM'hjeubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjLihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hj|h]hv}(hjYihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(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]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM\hjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhhM\ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_add_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM`hjiubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjih]hint i}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM]hjiubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM]hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihM]hjiubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM^hjiubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhM^hjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhM^hjiubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hj7jh]h Description}(hj9jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5jubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM`hjiubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjMjhhhNhNubj)}(h**v**h]hv}(hjUjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMjubh to (}(hjMjhhhNhNubj)}(h**v**h]hv}(hjgjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMjubh + }(hjMjhhhNhNubj)}(h**i**h]hi}(hjyjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMjubh) with release ordering.}(hjMjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM_hjiubjM)}(hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMahjiubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMchjiubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_add_return_relaxed (C function)c.raw_atomic_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_relaxed (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMvubjQ)}(h h]h }(hj khhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhjkhMvubh)}(hraw_atomic_add_return_relaxedh]j)}(hraw_atomic_add_return_relaxedh]hraw_atomic_add_return_relaxed}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhjkhMvubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj7khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubjQ)}(h h]h }(hjEkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3kubj)}(hjh]hi}(hjSkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/kubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjnkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpkmodnameN classnameNjwjz)}j}]j)}jsjksbc.raw_atomic_add_return_relaxedasbuh1hhjgkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgkubj)}(hj|h]hv}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/kubeh}(h]h ]h"]h$]h&]jjuh1j3hjjhhhjkhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjkhMvubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjkhMvhjjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMvhjkhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjkhMvubeh}(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. Safe to use in noinstr code; prefer atomic_add_return_relaxed() 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMzhjkubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjlh]hint i}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMwhj lubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj,lhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(lhMwhj)lubah}(h]h ]h"]h$]h&]uh1jhj lubeh}(h]h ]h"]h$]h&]uh1jhj(lhMwhj lubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjLlh]h atomic_t *v}(hjNlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMxhjFlubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjelhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjalhMxhjblubah}(h]h ]h"]h$]h&]uh1jhjFlubeh}(h]h ]h"]h$]h&]uh1jhjalhMxhj lubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMzhjkubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMyhjkubjM)}(hJSafe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM{hjkubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM}hjkubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj mhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubh.}(hj mhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_fetch_add (C function)c.raw_atomic_fetch_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_add (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_add(int i, atomic_t *v)h](j)}(hinth]hint}(hjJmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFmhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjYmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFmhhhjXmhMubh)}(hraw_atomic_fetch_addh]j)}(hraw_atomic_fetch_addh]hraw_atomic_fetch_add}(hjkmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgmubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFmhhhjXmhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]hi}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsjmmsbc.raw_atomic_fetch_addasbuh1hhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj|h]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubeh}(h]h ]h"]h$]h&]jjuh1j3hjFmhhhjXmhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBmhhhjXmhMubah}(h]j=mah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXmhMhj?mhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hj"nhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1j3hj?mhhhjXmhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:njHj:njIjJjKuh1hhhhjhNhNubj)}(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)}(hjDnh]h Parameters}(hjFnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBnubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjcnh]hint i}(hjenhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjanubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj]nubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj|nhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxnhMhjynubah}(h]h ]h"]h$]h&]uh1jhj]nubeh}(h]h ]h"]h$]h&]uh1jhjxnhMhjZnubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjnh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjZnubeh}(h]h ]h"]h$]h&]uh1jhj>nubjM)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to (}(hjnhhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh + }(hjnhhhNhNubj)}(h**i**h]hi}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh) with full ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.}(hj2ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubjM)}(h **Return**h]j)}(hjCoh]hReturn}(hjEohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAoubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubjM)}(hThe original value of **v**.h](hThe original value of }(hjYohhhNhNubj)}(h**v**h]hv}(hjaohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYoubh.}(hjYohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj>nubeh}(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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjohMubh)}(hraw_atomic_fetch_add_acquireh]j)}(hraw_atomic_fetch_add_acquireh]hraw_atomic_fetch_add_acquire}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjohMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubj)}(hjh]hi}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjoubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj pubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjosbc.raw_atomic_fetch_add_acquireasbuh1hhjpubjQ)}(h h]h }(hj.phhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:subah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj6subj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjUshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQshMhjRsubah}(h]h ]h"]h$]h&]uh1jhj6subeh}(h]h ]h"]h$]h&]uh1jhjQshMhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hjwsh]h Description}(hjyshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjusubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically 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 + }(hjshhhNhNubj)}(h**i**h]hi}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh) with release ordering.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(hThe original value of **v**.h](hThe original value of }(hjshhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hj:thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6thhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjIthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6thhhjHthMubh)}(hraw_atomic_fetch_add_relaxedh]j)}(hraw_atomic_fetch_add_relaxedh]hraw_atomic_fetch_add_relaxed}(hj[thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWtubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6thhhjHthMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjwthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjstubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjstubj)}(hjh]hi}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjstubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjotubj:)}(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)}jsj]tsbc.raw_atomic_fetch_add_relaxedasbuh1hhjtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj|h]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjotubeh}(h]h ]h"]h$]h&]jjuh1j3hj6thhhjHthMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2thhhjHthMubah}(h]j-tah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHthMhj/thhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuhhubah}(h]h ]h"]h$]h&]uh1j3hj/thhhjHthMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*ujHj*ujIjJjKuh1hhhhjhNhNubj)}(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)}(hj4uh]h Parameters}(hj6uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2uubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjSuh]hint i}(hjUuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjMuubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjluhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhuhMhjiuubah}(h]h ]h"]h$]h&]uh1jhjMuubeh}(h]h ]h"]h$]h&]uh1jhjhuhMhjJuubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjuh]h atomic_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjJuubeh}(h]h ]h"]h$]h&]uh1jhj.uubjM)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to (}(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh + }(hjuhhhNhNubj)}(h**i**h]hi}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh) with relaxed ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubjM)}(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"vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubjM)}(h **Return**h]j)}(hj3vh]hReturn}(hj5vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1vubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubjM)}(hThe original value of **v**.h](hThe original value of }(hjIvhhhNhNubj)}(h**v**h]hv}(hjQvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIvubh.}(hjIvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.uubeh}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjvhMubh)}(hraw_atomic_subh]j)}(hraw_atomic_subh]hraw_atomic_sub}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjvhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]hi}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjvsbc.raw_atomic_subasbuh1hhjvubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hj,whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hj|h]hv}(hj9whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubeh}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjvhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhjvhMubah}(h]j}vah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhMhjvhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj_whhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzwjHjzwjIjJjKuh1hhhhjhNhNubj)}(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)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjwh]hint i}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjwubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjwh]h atomic_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj~wubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj-xhhhNhNubj)}(h**v**h]hv}(hj5xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-xubh to (}(hj-xhhhNhNubj)}(h**v**h]hv}(hjGxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-xubh - }(hj-xhhhNhNubj)}(h**i**h]hi}(hjYxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-xubh) with relaxed ordering.}(hj-xhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubjM)}(h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.}(hjrxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubjM)}(hNothing.h]hNothing.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~wubeh}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxhhhjxhMubh)}(hraw_atomic_sub_returnh]j)}(hraw_atomic_sub_returnh]hraw_atomic_sub_return}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1hhjxhhhjxhMubj4)}(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}(hj!yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjymodnameN classnameNjwjz)}j}]j)}jsjxsbc.raw_atomic_sub_returnasbuh1hhj5yubjQ)}(h h]h }(hj\yhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5yubj)}(hjh]h*}(hjjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5yubj)}(hj|h]hv}(hjwyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5yubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubeh}(h]h ]h"]h$]h&]jjuh1j3hjxhhhjxhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxhhhjxhMubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxhMhjxhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjyhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjxhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjyubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjyh]hint i}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjyubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj3zhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/zhMhj0zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj/zhMhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubjM)}(h**Description**h]j)}(hjUzh]h Description}(hjWzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSzubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjyubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjkzhhhNhNubj)}(h**v**h]hv}(hjszhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkzubh to (}(hjkzhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkzubh - }(hjkzhhhNhNubj)}(h**i**h]hi}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkzubh) with full ordering.}(hjkzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubjM)}(hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_sub_return() elsewhere.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjyubjM)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjyubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjyubeh}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_sub_return_acquireh]j)}(hraw_atomic_sub_return_acquireh]hraw_atomic_sub_return_acquire}(hj9{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhj&{hM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjU{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ{ubjQ)}(h h]h }(hjc{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQ{ubj)}(hjh]hi}(hjq{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjM{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_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)}(hj|h]hv}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjM{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 subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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** ``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|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM$hj |ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj1|h]hint i}(hj3|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/|ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM!hj+|ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjJ|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjF|hM!hjG|ubah}(h]h ]h"]h$]h&]uh1jhj+|ubeh}(h]h ]h"]h$]h&]uh1jhjF|hM!hj(|ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjj|h]h atomic_t *v}(hjl|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjh|ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM"hjd|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&]uh1jhjd|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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM$hj |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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM#hj |ubjM)}(hJSafe to use in noinstr code; prefer atomic_sub_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_sub_return_acquire() elsewhere.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjh}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd}hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM;ubjQ)}(h h]h }(hjw}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjd}hhhjv}hM;ubh)}(hraw_atomic_sub_return_releaseh]j)}(hraw_atomic_sub_return_releaseh]hraw_atomic_sub_return_release}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjd}hhhjv}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.raw_atomic_sub_return_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)}(hj|h]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubeh}(h]h ]h"]h$]h&]jjuh1j3hjd}hhhjv}hM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`}hhhjv}hM;ubah}(h]j[}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjv}hM;hj]}hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj@~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM;hj=~hhubah}(h]h ]h"]h$]h&]uh1j3hj]}hhhjv}hM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjX~jHjX~jIjJjKuh1hhhhjhNhNubj)}(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)}(hjb~h]h Parameters}(hjd~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`~ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM?hj\~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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM<hj{~ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(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<hjx~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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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=hjx~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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM?hj\~ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release 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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM>hj\~ubjM)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM@hj\~ubjM)}(h **Return**h]j)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMBhj\~ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjwhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMChj\~ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMUubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMUubh)}(hraw_atomic_sub_return_relaxedh]j)}(hraw_atomic_sub_return_relaxedh]hraw_atomic_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMUubj4)}(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)}jsjsbc.raw_atomic_sub_return_relaxedasbuh1hhj%ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hj|h]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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 subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMUhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMUubeh}(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. Safe to use in noinstr code; prefer atomic_sub_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMVhjˀubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjˀubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjȀ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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMWhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjȀubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj[hhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh to (}(hj[hhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMZhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMlubh)}(hraw_atomic_fetch_subh]j)}(hraw_atomic_fetch_subh]hraw_atomic_fetch_sub}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMlubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]hi}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(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&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsj+sbc.raw_atomic_fetch_subasbuh1hhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(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)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMlhj݂hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMlubeh}(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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMphjubj)}(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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMmhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMmhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjZh]h atomic_t *v}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMnhjTubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMnhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMnhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMphjubjM)}(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}(hj׃hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMohjubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMqhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMshjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMthjubeh}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjThhhjfhMubh)}(hraw_atomic_fetch_sub_acquireh]j)}(hraw_atomic_fetch_sub_acquireh]hraw_atomic_fetch_sub_acquire}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjThhhjfhMubj4)}(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.raw_atomic_fetch_sub_acquireasbuh1hhjńubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjńubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjńubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjńubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjThhhjfhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjfhMubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjfhMhjMhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhjfhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(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)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjqh]hint i}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhMhjhubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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&]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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjˆsbc.raw_atomic_fetch_sub_releaseasbuh1hhjubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjWhhhNhNubah}(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 release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjÇhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjKhhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh to (}(hjKhhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh - }(hjKhhhNhNubj)}(h**i**h]hi}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh) with release ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_sub_relaxedh]j)}(hraw_atomic_fetch_sub_relaxedh]hraw_atomic_fetch_sub_relaxed}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]hi}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(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.raw_atomic_fetch_sub_relaxedasbuh1hhjeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&hMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjJh]h atomic_t *v}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjNJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjVhMubh)}(hraw_atomic_inch]j)}(hraw_atomic_inch]hraw_atomic_inc}(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.raw_atomic_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjËhhhNhNubah}(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 relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj-h]h atomic_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj'ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjŒh]hReturn}(hjČhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hj،hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_inc_returnh]j)}(hraw_atomic_inc_returnh]hraw_atomic_inc_return}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsj*sbc.raw_atomic_inc_returnasbuh1hhj@ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hj|h]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 increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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. Safe to use in noinstr code; prefer atomic_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&]uh1jhjˍubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjǍubjM)}(h;Atomically updates **v** to (**v** + 1) with full 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 + 1) with full ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjǍubjM)}(hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hj؎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԎhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjԎhhhjhMubh)}(hraw_atomic_inc_return_acquireh]j)}(hraw_atomic_inc_return_acquireh]hraw_atomic_inc_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjԎhhhjhMubj4)}(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_inc_return_acquireasbuh1hhjubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(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&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjyhhubah}(h]h ]h"]h$]h&]uh1j3hj͎hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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ҏ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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_inc_return_releaseh]j)}(hraw_atomic_inc_return_releaseh]hraw_atomic_inc_return_release}(hjʐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƐubah}(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)$}jsj̐sbc.raw_atomic_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj$hhhNhNubah}(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 increment with release orderingh]h&atomic increment with release ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjɑh]h Description}(hjˑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǑubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h>Atomically updates **v** to (**v** + 1) with release 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 release ordering.}(hjߑhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h **Return**h]j)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM!hjiubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj9hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM"hjiubeh}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM4ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjhM4ubh)}(hraw_atomic_inc_return_relaxedh]j)}(hraw_atomic_inc_return_relaxedh]hraw_atomic_inc_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjhM4ubj4)}(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_inc_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjڒhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjhM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjhM4ubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM4hjohhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM4hjhhubah}(h]h ]h"]h$]h&]uh1j3hjohhhjhM4ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(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@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8hj: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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM5hjYubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthM5hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM5hjVubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM7hj: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}(hjʓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM6hj:ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8hj:ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhMJubh)}(hraw_atomic_fetch_inch]j)}(hraw_atomic_fetch_inch]hraw_atomic_fetch_inc}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjYhMJubj4)}(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)}jsjnsbc.raw_atomic_fetch_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjƔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjYhMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjYhMJubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhMJhj@hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJhjhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjYhMJubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMNhj 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMKhj*ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMKhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMMhj 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMLhj ubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMNhj ubjM)}(h **Return**h]j)}(hjŕh]hReturn}(hjǕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÕubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMPhj 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQhj ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj*hMdubh)}(hraw_atomic_fetch_inc_acquireh]j)}(hraw_atomic_fetch_inc_acquireh]hraw_atomic_fetch_inc_acquire}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj*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&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsj?sbc.raw_atomic_fetch_inc_acquireasbuh1hhjUubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj*hMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj*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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj*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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhhjܖubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMghjܖubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire 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 + 1) with acquire ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMfhjܖubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_inc_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_inc_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhhjܖubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMjhjܖ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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMkhjܖubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM~ubh)}(hraw_atomic_fetch_inc_releaseh]j)}(hraw_atomic_fetch_inc_releaseh]hraw_atomic_fetch_inc_release}(hjhhhNhNubah}(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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_inc_releaseasbuh1hhj&ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hj|h]hv}(hjhhhhNhNubah}(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 with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjҘh]h atomic_t *v}(hjԘhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjИubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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ɘ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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj͙hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj̙hMubh)}(hraw_atomic_fetch_inc_relaxedh]j)}(hraw_atomic_fetch_inc_relaxedh]hraw_atomic_fetch_inc_relaxed}(hjߙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۙubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj̙hMubj4)}(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_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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 increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj̙hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubjM)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_dech]j)}(hraw_atomic_dech]hraw_atomic_dec}(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}(hjϛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̛ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjћmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_decasbuh1hhjțubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjțubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjțubj)}(hj|h]hv}(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)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(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)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhMhjkubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj\hMubh)}(hraw_atomic_dec_returnh]j)}(hraw_atomic_dec_returnh]hraw_atomic_dec_return}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj\hMubj4)}(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)}jsjqsbc.raw_atomic_dec_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjɝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj\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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj3h]h atomic_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj-hMubh)}(hraw_atomic_dec_return_acquireh]j)}(hraw_atomic_dec_return_acquireh]hraw_atomic_dec_return_acquire}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj-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 reftargetjamodnameN classnameNjwjz)}j}]j)}jsjBsbc.raw_atomic_dec_return_acquireasbuh1hhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubah}(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 acquire orderingh]h&atomic decrement with acquire ordering}(hjßhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj-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. Safe to use in noinstr code; prefer atomic_dec_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjߟubjM)}(h**Description**h]j)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjߟubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjUhhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh to (}(hjUhhhNhNubj)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh - 1) with acquire ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjߟubjM)}(hJSafe to use in noinstr code; prefer atomic_dec_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_dec_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_dec_return_releaseh]j)}(hraw_atomic_dec_return_releaseh]hraw_atomic_dec_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_dec_return_releaseasbuh1hhj)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hj|h]hv}(hjkhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjաh]h atomic_t *v}(hjסhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjӡubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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̡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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjТhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjϢhMubh)}(hraw_atomic_dec_return_relaxedh]j)}(hraw_atomic_dec_return_relaxedh]hraw_atomic_dec_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjϢhMubj4)}(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_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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 relaxed orderingh]h&atomic decrement with relaxed ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjϢ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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjQhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM$ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM$ubh)}(hraw_atomic_fetch_dech]j)}(hraw_atomic_fetch_dech]hraw_atomic_fetch_dec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM$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)}jsjsbc.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)}(hj|h]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)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM$hj3hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhjhNhNubj)}(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)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM(hjRubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjwh]h atomic_t *v}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM%hjqubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjnubah}(h]h ]h"]h$]h&]uh1jhjRubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM'hjRubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM&hjRubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM(hjRubjM)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM*hjRubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+hjRubeh}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM>ubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjqhM>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_hhhjqhM>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*}(hjѦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjަhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjqhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjqhM>ubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhM>hjXhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM>hjhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjqhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjHh]h atomic_t *v}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM?hjBubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hM?hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj̧hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMBhj#ubjM)}(h **Return**h]j)}(hjݧh]hReturn}(hjߧhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۧubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMXubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjBhMXubh)}(hraw_atomic_fetch_dec_releaseh]j)}(hraw_atomic_fetch_dec_releaseh]hraw_atomic_fetch_dec_release}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjBhMXubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsjWsbc.raw_atomic_fetch_dec_releaseasbuh1hhjmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjBhMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjBhMXubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMXhj)hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjبhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMXhjըhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjBhMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hMYhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMYhjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubjM)}(h>Atomically updates **v** to (**v** - 1) with release 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 - 1) with release ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMqubh)}(hraw_atomic_fetch_dec_relaxedh]j)}(hraw_atomic_fetch_dec_relaxedh]hraw_atomic_fetch_dec_relaxed}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMqubj4)}(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_fetch_dec_relaxedasbuh1hhj>ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMqubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMqhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMqubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hj˪h]h Parameters}(hjͪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɪubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMuhjŪubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjŪubjM)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMthjŪubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh - 1) with relaxed ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMshjŪubjM)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMuhjŪubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMwhjŪ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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMxhjŪubeh}(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}(hj֫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҫhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjҫhhhjhMubh)}(hraw_atomic_andh]j)}(hraw_atomic_andh]hraw_atomic_and}(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&]noemphjjuh1j9hj ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_andasbuh1hhjCubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(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)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj˫hhhjhMubeh}(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_and() 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjAhhhNhNubah}(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)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjʬubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjyhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh to (}(hjyhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjʬubjM)}(h;Safe to use in noinstr code; prefer atomic_and() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_and() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjʬubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj"hMubh)}(hraw_atomic_fetch_andh]j)}(hraw_atomic_fetch_andh]hraw_atomic_fetch_and}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj"hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]hi}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(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)}jsj7sbc.raw_atomic_fetch_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjîhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubeh}(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%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_and() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj'ubj)}(hhh]jM)}(h int valueh]h int value}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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$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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhjrhMubh)}(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`hhhjrhMubj4)}(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)}jsjsbc.raw_atomic_fetch_and_acquireasbuh1hhjѰubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjѰubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѰubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѰubeh}(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)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj9hhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(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)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj}h]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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˱hMhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubjM)}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjòhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj²hMubh)}(hraw_atomic_fetch_and_releaseh]j)}(hraw_atomic_fetch_and_releaseh]hraw_atomic_fetch_and_release}(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}(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)}jsjײsbc.raw_atomic_fetch_and_releaseasbuh1hhj!ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hj|h]hv}(hjchhhNhNubah}(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)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_and_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjdzubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjijubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjijubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with release 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 release ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_and_relaxedh]j)}(hraw_atomic_fetch_and_relaxedh]hraw_atomic_fetch_and_relaxed}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=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&]noemphjjuh1j9hj9ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsj'sbc.raw_atomic_fetch_and_relaxedasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjVh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjPubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjӶhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjbhMubh)}(hraw_atomic_andnoth]j)}(hraw_atomic_andnoth]hraw_atomic_andnot}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjbhMubj4)}(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)}jsjwsbc.raw_atomic_andnotasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjbhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjbhMubah}(h]jGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbhMhjIhhubj4)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjbhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjmh]hint i}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߸ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubjM)}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubjM)}(h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.h]h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubjM)}(hNothing.h]hNothing.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(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)}jsjsbc.raw_atomic_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjAhhhNhNubah}(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 AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjghhubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hj5hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh to (}(hj5hhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh & }(hj5hhhNhNubj)}(h**~i**h]h~i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh) with full ordering.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhj޻hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM/ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj޻hhhjhM/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&]jjuh1hhj޻hhhjhM/ubj4)}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_fetch_andnot_acquireasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(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,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1j3hj׻hhhjhM/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 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)}(hjܼh]h Parameters}(hj޼hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڼubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM3hjּ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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM0hjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM1hj.ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM1hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM1hjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM3hjּubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM2hjּubjM)}(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.}(hjʽhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM4hjּubjM)}(h **Return**h]j)}(hj۽h]hReturn}(hjݽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٽubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM6hjּ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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM7hjּubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj@hMJubh)}(hraw_atomic_fetch_andnot_releaseh]j)}(hraw_atomic_fetch_andnot_releaseh]hraw_atomic_fetch_andnot_release}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhj@hMJubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubj:)}(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)}jsjUsb!c.raw_atomic_fetch_andnot_releaseasbuh1hhjubjQ)}(h h]h }(hjƾhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjԾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubeh}(h]h ]h"]h$]h&]jjuh1j3hj.hhhj@hMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj@hMJubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hMJhj'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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJhjhhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj@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)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMNhj&ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjKh]hint i}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMKhjEubj)}(hhh]jM)}(h int valueh]h int value}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hMKhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMKhjBubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMLhj~ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjBubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMNhj&ubjM)}(hCAtomically 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjտubh & }(hjտhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjտubh) with release ordering.}(hjտhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMMhj&ubjM)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMOhj&ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQhj&ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMRhj&ubeh}(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&]uh1jhj~hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhMdubh)}(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&]jjuh1hhj~hhhjhMdubj4)}(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_fetch_andnot_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhjhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjhMdubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMdhjwhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhjWhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhhjvubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMfhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjvubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhhjvubjM)}(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}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh) with relaxed ordering.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMghjvubjM)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMihjvubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMkhjvubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMlhjvubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_orasbuh1hhj?ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hj|h]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM{hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM{ubeh}(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_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM|hjubj)}(hhh]jM)}(h int valueh]h int value}(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)}(hj$h]h atomic_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM}hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM}hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM}hjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to (}(hjuhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh | }(hjuhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh) with relaxed ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMubh)}(hraw_atomic_fetch_orh]j)}(hraw_atomic_fetch_orh]hraw_atomic_fetch_or}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMubj4)}(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}(hjihhhNhNubah}(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)}jsj3sbc.raw_atomic_fetch_orasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubeh}(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)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj#ubj)}(hhh]jM)}(h int valueh]h int value}(hjBhhhNhNubah}(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)}(hjbh]h atomic_t *v}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jhj\hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\hhhjnhMubh)}(hraw_atomic_fetch_or_acquireh]j)}(hraw_atomic_fetch_or_acquireh]hraw_atomic_fetch_or_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\hhhjnhMubj4)}(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.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj\hhhjnhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhjnhMubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnhMhjUhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjnhMubeh}(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_or_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjyh]hint i}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjsubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjpubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubjM)}(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}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubjM)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubjM)}(hThe original value of **v**.h](hThe original value of }(hjohhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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&]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}(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.raw_atomic_fetch_or_releaseasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 OR with release orderingh]h'atomic bitwise OR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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}(hjmhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_or_relaxedh]j)}(hraw_atomic_fetch_or_relaxedh]hraw_atomic_fetch_or_relaxed}(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&]uh1jhj9ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]hi}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsj#sbc.raw_atomic_fetch_or_relaxedasbuh1hhjmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubeh}(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 relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hj2hhhNhNubah}(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)}(hjRh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhj^hMubh)}(hraw_atomic_xorh]j)}(hraw_atomic_xorh]hraw_atomic_xor}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(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}(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)}jsjssbc.raw_atomic_xorasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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 XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj%hhubah}(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_xor() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubjM)}(h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubjM)}(hNothing.h]hNothing.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(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.raw_atomic_fetch_xorasbuh1hhjubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjchhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full 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 full ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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)}jsjsbc.raw_atomic_fetch_xor_acquireasbuh1hhjKubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(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 XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(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_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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM!hj*ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM!hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM!hjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_xor_releaseh]j)}(hraw_atomic_fetch_xor_releaseh]hraw_atomic_fetch_xor_release}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj<hM:ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubj:)}(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)}jsjQsbc.raw_atomic_fetch_xor_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubeh}(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 release orderingh]h(atomic bitwise XOR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj<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 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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM>hj"ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM;hjAubj)}(hhh]jM)}(h int valueh]h int value}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hM;hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(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)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM<hjzubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM<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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMAhj"ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMTubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjhMTubh)}(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&]jjuh1hhjzhhhjhMTubj4)}(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.raw_atomic_fetch_xor_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjzhhhjhMTubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhjhMTubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMThjshhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMThjShhubah}(h]h ]h"]h$]h&]uh1j3hjshhhjhMTubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjnjHjnjIjJjKuh1hhhhjhNhNubj)}(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)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMXhjrubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMUhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjrubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMXhjrubjM)}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh) with relaxed ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMWhjrubjM)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMYhjrubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM[hjrubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM\hjrubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_xchgasbuh1hhjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(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&]jjuh1j3hjhhhjhMkubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMkubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMkhjhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMkhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMkubeh}(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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMohjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMmhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMmhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMohjubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh to }(hjrhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh with full ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubjM)}(hint 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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&]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)}jsjsbc.raw_atomic_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 }(hjNhhhNhNubah}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(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&]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 acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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`` 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hj5h]hint old}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj/ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjnh]hint new}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj9h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjOhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 }(hj1hhhNhNubah}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hnewh]hnew}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hj1hhhNhNubah}(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)}(hjQh]hint new}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjKubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhM(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&]jjuh1hhjohhhjhM(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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(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:)}(hint newh](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hnewh]hnew}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhM(ubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM(hj~hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhM(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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*hjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hj4h]hint new}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+hj.ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhj(ubh otherwise.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_try_cmpxchg_acquire (C function) c.raw_atomic_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_acquire (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMcubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjhMcubh)}(hraw_atomic_try_cmpxchg_acquireh]j)}(hraw_atomic_try_cmpxchg_acquireh]hraw_atomic_try_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjhMcubj4)}(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_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjshhhjhMcubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjhMcubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMchjlhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMchjhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjhMcubeh}(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. Safe to use in noinstr code; prefer atomic_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMghjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMehj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMehjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMfhj>ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMfhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMfhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubjM)}(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}(hjhhhNhNubah}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMghjubjM)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubjM)}(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}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh otherwise.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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 }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(holdh]hold}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&ubj)}(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&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjeh]hint new}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh if the exchange occurred, }(hjjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh otherwise.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(holdh]hold}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(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 relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hj9hhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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.raw_atomic_sub_and_testasbuh1hhjFubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(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)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj%ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjVhMubh)}(hraw_atomic_dec_and_testh]j)}(hraw_atomic_dec_and_testh]hraw_atomic_dec_and_test}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjVhMubj4)}(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.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubah}(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)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjVhMubeh}(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_dec_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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj-h]h atomic_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj'ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh - 1) with full ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjFhMubh)}(hraw_atomic_inc_and_testh]j)}(hraw_atomic_inc_and_testh]hraw_atomic_inc_and_test}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjFhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsj[sbc.raw_atomic_inc_and_testasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubah}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjFhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjFhMubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhMhj.hhubj4)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjFhMubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to (}(hjnhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh + 1) with full ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj6hM ubh)}(hraw_atomic_add_negativeh]j)}(hraw_atomic_add_negativeh]hraw_atomic_add_negative}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj6hM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(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)}jsjKsbc.raw_atomic_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj6hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj6hM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hM hjhhubj4)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjAh]hint i}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhM hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM hj8ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjzh]h atomic_t *v}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjtubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM hj8ubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh if the resulting value of }(hj7hhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh is negative, }(hj7hhhNhNubj)}(h **false**h]hfalse}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh otherwise.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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)}jsjsb!c.raw_atomic_add_negative_acquireasbuh1hhjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjFhhhNhNubah}(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)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjlhhubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically 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 + }(hj:hhhNhNubj)}(h**i**h]hi}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh) with acquire ordering.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM7 ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM7 ubh)}(hraw_atomic_add_negative_releaseh]j)}(hraw_atomic_add_negative_releaseh]hraw_atomic_add_negative_release}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM7 ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?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 atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j)}jsj)sb!c.raw_atomic_add_negative_releaseasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM7 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM7 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM7 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM7 hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM7 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hM8 hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM8 hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXh]h atomic_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjRubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM9 hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM9 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj+hhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQ ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjhMQ 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&]jjuh1hhjrhhhjhMQ 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*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjhMQ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhjhMQ ubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMQ hjkhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjJ hhubah}(h]h ]h"]h$]h&]uh1j3hjkhhhjhMQ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGje jHje jIjJjKuh1hhhhjhNhNubj)}(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)}(hjo h]h Parameters}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMU hji 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMR hj ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMR hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMR hj 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMS hj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMS hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMS hj ubeh}(h]h ]h"]h$]h&]uh1jhji ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMU hji 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}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**i**h]hi}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMT hji ubjM)}(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.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMV hji ubjM)}(h **Return**h]j)}(hjn h]hReturn}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMX hji 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMY hji ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMh ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMh ubh)}(hraw_atomic_fetch_add_unlessh]j)}(hraw_atomic_fetch_add_unlessh]hraw_atomic_fetch_add_unless}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMh ubj4)}(h(atomic_t *v, int a, int u)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_add_unlessasbuh1hhj ubjQ)}(h h]h }(hjE hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjS hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj|h]hv}(hj` hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint ah](j)}(hinth]hint}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt ubj)}(hjh]ha}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint uh](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)}(hjlh]hu}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMh ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMh hj 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMh hj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMh 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj2 h]h atomic_t *v}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0 ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMi hj, ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjG hMi hjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhjG hMi hj) ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjk h]hint a}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMj hje ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMj hj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jhj hMj hj) 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMk hj ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMk hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMk 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(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}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**a**h]ha}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh!) with full ordering. Otherwise, }(hj hhhNhNubj)}(h**v**h]hv}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMo hj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMq 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_add_unlessh]j)}(hraw_atomic_add_unlessh]hraw_atomic_add_unless}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hM ubj4)}(h(atomic_t *v, int a, int u)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_add_unlessasbuh1hhjubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint ah](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(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&]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 unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hj]h]hint a}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 hjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(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}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM 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_inc_not_zeroasbuh1hhj"ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hj|h]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(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 unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(hjhhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != 0), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(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_inc_unless_negativeasbuh1hhj6ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hj|h]hv}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubah}(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)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(hj3hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh >= 0), atomically updates }(hj3hhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh to (}(hj3hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh% + 1) with full ordering. Otherwise, }(hj3hhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh2 is not modified and relaxed ordering is provided.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_dec_unless_positiveh]j)}(hraw_atomic_dec_unless_positiveh]hraw_atomic_dec_unless_positive}(hj2hhhNhNubah}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsj4sb c.raw_atomic_dec_unless_positiveasbuh1hhjJubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(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)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(hjGhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh <= 0), atomically updates }(hjGhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh to (}(hjGhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh% - 1) with full ordering. Otherwise, }(hjGhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh2 is not modified and relaxed ordering is provided.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"hhhj4hM ubh)}(hraw_atomic_dec_if_positiveh]j)}(hraw_atomic_dec_if_positiveh]hraw_atomic_dec_if_positive}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"hhhj4hM ubj4)}(h (atomic_t *v)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.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubah}(h]h ]h"]h$]h&]jjuh1j3hj"hhhj4hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj4hM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hM hjhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj4hM 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh% - 1) 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_readsbc.raw_atomic64_readasbuh1hhj)hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhjQhM ubh)}(hraw_atomic64_readh]j)}(hjNh]hraw_atomic64_read}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhjQhM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jLc.raw_atomic64_readasbuh1hhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hj)hhhjQhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhjQhM ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhM hj"hhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhjQhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hj@h]hconst atomic64_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hj7ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_read_acquiresbc.raw_atomic64_read_acquireasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj>hM ubh)}(hraw_atomic64_read_acquireh]j)}(hj;h]hraw_atomic64_read_acquire}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj>hM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hj h]hconst}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubh)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j9c.raw_atomic64_read_acquireasbuh1hhjhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubah}(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 load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj>hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hj-h]hconst atomic64_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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 hj$ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh with acquire ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM! hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM" hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8 ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM8 ubh)}(hraw_atomic64_seth]j)}(hraw_atomic64_seth]hraw_atomic64_set}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM8 ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(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}]j)}jsj*sbc.raw_atomic64_setasbuh1hhj@ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jcc.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&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM8 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM8 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM8 hjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM8 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj3h]h atomic64_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM9 hj-ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhM9 hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM9 hj*ubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjlh]hs64 i}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM: hjfubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM: 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubjM)}(h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMI ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjThMI ubh)}(hraw_atomic64_set_releaseh]j)}(hraw_atomic64_set_releaseh]hraw_atomic64_set_release}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjThMI 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)}jsjisbc.raw_atomic64_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubj:)}(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&]noemphjjuh1j9hj{ubeh}(h]h ]h"]h$]h&]jjuh1j3hjBhhhjThMI ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhjThMI ubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjThMI hj;hhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMI hj. hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhjThMI ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjI jHjI jIjJjKuh1hhhhjhNhNubj)}(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)}(hjS h]h Parameters}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMM hjM ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjr h]h atomic64_t *v}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjp ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjl ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMJ hj ubah}(h]h ]h"]h$]h&]uh1jhjl ubeh}(h]h ]h"]h$]h&]uh1jhj hMJ hji ubj)}(h``s64 i`` s64 value to assign 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMK hj ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMK hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMK hji ubeh}(h]h ]h"]h$]h&]uh1jhjM ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMM hjM 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhML hjM ubjM)}(hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.}(hj/!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMN hjM ubjM)}(h **Return**h]j)}(hj@!h]hReturn}(hjB!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>!ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMP hjM ubjM)}(hNothing.h]hNothing.}(hjV!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjM ubeh}(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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_addh]j)}(hraw_atomic64_addh]hraw_atomic64_add}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj!hMc 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.raw_atomic64_addasbuh1hhj!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_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)}(hj|h]hv}(hjG"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj!ubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj!hMc ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}!hhhj!hMc ubah}(h]jx!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMc hjz!hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjp"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMc hjm"hhubah}(h]h ]h"]h$]h&]uh1j3hjz!hhhj!hMc 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 relaxed ordering. Safe to use in noinstr code; prefer atomic64_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMg 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMd hj"ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(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"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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMe hj"ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMe hj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMe 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMg hj"ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj;#hhhNhNubj)}(h**v**h]hv}(hjC#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;#ubh to (}(hj;#hhhNhNubj)}(h**v**h]hv}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;#ubh + }(hj;#hhhNhNubj)}(h**i**h]hi}(hjg#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;#ubh) with relaxed ordering.}(hj;#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMf hj"ubjM)}(h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMh hj"ubjM)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMj hj"ubjM)}(hNothing.h]hNothing.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMk hj"ubeh}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_returnsbc.raw_atomic64_add_returnasbuh1hhj#hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMt ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hMt ubh)}(hraw_atomic64_add_returnh]j)}(hj#h]hraw_atomic64_add_return}(hj $hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj $ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hMt 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_add_returnasbuh1hhj$$ubjQ)}(h h]h }(hjI$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$$ubj)}(hjh]hi}(hjW$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_add_returnasbuh1hhjk$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjk$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk$ubj)}(hj|h]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj $ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj#hMt ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj#hMt ubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hMt hj#hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMt hj$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hMt 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 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)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj%h]hs64 i}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMu hj%ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(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 %ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjN%h]h atomic64_t *v}(hjP%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjL%ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMv hjH%ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjg%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjc%hMv hjd%ubah}(h]h ]h"]h$]h&]uh1jhjH%ubeh}(h]h ]h"]h$]h&]uh1jhjc%hMv 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMx 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMy hj$ubjM)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjO&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQ&modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_acquiresb!c.raw_atomic64_add_return_acquireasbuh1hhjH&hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjq&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH&hhhjp&hM ubh)}(hraw_atomic64_add_return_acquireh]j)}(hjm&h]hraw_atomic64_add_return_acquire}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjH&hhhjp&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}]jk&!c.raw_atomic64_add_return_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}]jk&!c.raw_atomic64_add_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)}(hj|h]hv}(hj!'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjH&hhhjp&hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjD&hhhjp&hM ubah}(h]j?&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjp&hM hjA&hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjJ'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjG'hhubah}(h]h ]h"]h$]h&]uh1j3hjA&hhhjp&hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjb'jHjb'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)}(hjl'h]h Parameters}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj'ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj'h]h atomic64_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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'ubeh}(h]h ]h"]h$]h&]uh1jhjf'ubjM)}(h**Description**h]j)}(hj'h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'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}(hjA(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh) with acquire ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'ubjM)}(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.}(hjZ(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'ubjM)}(h **Return**h]j)}(hjk(h]hReturn}(hjm(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji(ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjf'ubeh}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_releasesb!c.raw_atomic64_add_return_releaseasbuh1hhj(hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_add_return_releaseh]j)}(hj(h]hraw_atomic64_add_return_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_add_return_releaseasbuh1hhj)ubjQ)}(h h]h }(hj5)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]hi}(hjC)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_add_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)}(hj|h]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW)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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj:*h]h atomic64_t *v}(hj<*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8*ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4*ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjS*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjO*hM hjP*ubah}(h]h ]h"]h$]h&]uh1jhj4*ubeh}(h]h ]h"]h$]h&]uh1jhjO*hM hj)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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubjM)}(hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hj;+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=+modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_relaxedsb!c.raw_atomic64_add_return_relaxedasbuh1hhj4+hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj]+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4+hhhj\+hM ubh)}(hraw_atomic64_add_return_relaxedh]j)}(hjY+h]hraw_atomic64_add_return_relaxed}(hjo+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4+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}]jW+!c.raw_atomic64_add_return_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}]jW+!c.raw_atomic64_add_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)}(hj|h]hv}(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hj4+hhhj\+hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0+hhhj\+hM ubah}(h]j++ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\+hM hj-+hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj6,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3,hhubah}(h]h ]h"]h$]h&]uh1j3hj-+hhhj\+hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjN,jHjN,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. Safe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjX,h]h Parameters}(hjZ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV,ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjw,h]hs64 i}(hjy,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju,ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq,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&]uh1jhjq,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjn,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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,ubjM)}(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.}(hjF-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,ubjM)}(h **Return**h]j)}(hjW-h]hReturn}(hjY-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU-ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR,ubeh}(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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_addsbc.raw_atomic64_fetch_addasbuh1hhj-hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_addh]j)}(hj-h]hraw_atomic64_fetch_add}(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_addasbuh1hhj-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}(hjJ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjL.modnameN classnameNjwjz)}j}]j-c.raw_atomic64_fetch_addasbuh1hhjC.ubjQ)}(h h]h }(hjh.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjC.ubj)}(hjh]h*}(hjv.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC.ubj)}(hj|h]hv}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC.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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj&/h]h atomic64_t *v}(hj(/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$/ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 hj1ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjc1h]hs64 i}(hje1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja1ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj]1ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj|1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx1hM hjy1ubah}(h]h ]h"]h$]h&]uh1jhj]1ubeh}(h]h ]h"]h$]h&]uh1jhjx1hM hjZ1ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj1ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hjZ1ubeh}(h]h ]h"]h$]h&]uh1jhj>1ubjM)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj>1ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh to (}(hj1hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh + }(hj1hhhNhNubj)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh) with acquire ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj>1ubjM)}(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.}(hj22hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj>1ubjM)}(h **Return**h]j)}(hjC2h]hReturn}(hjE2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA2ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj>1ubjM)}(hThe original value of **v**.h](hThe original value of }(hjY2hhhNhNubj)}(h**v**h]hv}(hja2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY2ubh.}(hjY2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj>1ubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_releasesb c.raw_atomic64_fetch_add_releaseasbuh1hhj2hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hM ubh)}(hraw_atomic64_fetch_add_releaseh]j)}(hj2h]hraw_atomic64_fetch_add_release}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhj2hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j2 c.raw_atomic64_fetch_add_releaseasbuh1hhj2ubjQ)}(h h]h }(hj 3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]hi}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj63hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj33ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj83modnameN classnameNjwjz)}j}]j2 c.raw_atomic64_fetch_add_releaseasbuh1hhj/3ubjQ)}(h h]h }(hjT3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/3ubj)}(hjh]h*}(hjb3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/3ubj)}(hj|h]hv}(hjo3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubeh}(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 add with release orderingh]h atomic add with release ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3hhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj3h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hj3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj4h]h atomic64_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj 4ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj+4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'4hM hj(4ubah}(h]h ]h"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]uh1jhj'4hM hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjM4h]h Description}(hjO4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK4ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjc4hhhNhNubj)}(h**v**h]hv}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc4ubh to (}(hjc4hhhNhNubj)}(h**v**h]hv}(hj}4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc4ubh + }(hjc4hhhNhNubj)}(h**i**h]hi}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc4ubh) with release ordering.}(hjc4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(hThe original value of **v**.h](hThe original value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_relaxedsb c.raw_atomic64_fetch_add_relaxedasbuh1hhj 5hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+ ubjQ)}(h h]h }(hj55hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 5hhhj45hM+ ubh)}(hraw_atomic64_fetch_add_relaxedh]j)}(hj15h]hraw_atomic64_fetch_add_relaxed}(hjG5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj 5hhhj45hM+ ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hje5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjg5modnameN classnameNjwjz)}j}]j/5 c.raw_atomic64_fetch_add_relaxedasbuh1hhj^5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^5ubj)}(hjh]hi}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZ5ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j/5 c.raw_atomic64_fetch_add_relaxedasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hj|h]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZ5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj 5hhhj45hM+ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhj45hM+ ubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj45hM+ hj5hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj 6hhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhj45hM+ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&6jHj&6jIjJjKuh1hhhhjhNhNubj)}(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)}(hj06h]h Parameters}(hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.6ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj*6ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjO6h]hs64 i}(hjQ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjM6ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM, hjI6ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjh6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjd6hM, hje6ubah}(h]h ]h"]h$]h&]uh1jhjI6ubeh}(h]h ]h"]h$]h&]uh1jhjd6hM, hjF6ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj6h]h atomic64_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM- hj6ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM- hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM- hjF6ubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj*6ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to (}(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh + }(hj6hhhNhNubj)}(h**i**h]hi}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh) with relaxed ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM. hj*6ubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM0 hj*6ubjM)}(h **Return**h]j)}(hj/7h]hReturn}(hj17hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-7ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM2 hj*6ubjM)}(hThe original value of **v**.h](hThe original value of }(hjE7hhhNhNubj)}(h**v**h]hv}(hjM7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE7ubh.}(hjE7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM3 hj*6ubeh}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMB ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hMB ubh)}(hraw_atomic64_subh]j)}(hraw_atomic64_subh]hraw_atomic64_sub}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hMB ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsj7sbc.raw_atomic64_subasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j7c.raw_atomic64_subasbuh1hhj8ubjQ)}(h h]h }(hj-8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj;8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hj|h]hv}(hjH8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~7hhhj7hMB ubah}(h]jy7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMB hj{7hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMB hjn8hhubah}(h]h ]h"]h$]h&]uh1j3hj{7hhhj7hMB ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMF hj8ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj8h]hs64 i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMC hj8ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMC hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMC hj8ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj8h]h atomic64_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMD hj8ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMD hj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMD hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hj&9h]h Description}(hj(9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$9ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMF hj8ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj<9hhhNhNubj)}(h**v**h]hv}(hjD9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<9ubh to (}(hj<9hhhNhNubj)}(h**v**h]hv}(hjV9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<9ubh - }(hj<9hhhNhNubj)}(h**i**h]hi}(hjh9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<9ubh) with relaxed ordering.}(hj<9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhME hj8ubjM)}(h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMG hj8ubjM)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMI hj8ubjM)}(hNothing.h]hNothing.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj8ubeh}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_returnsbc.raw_atomic64_sub_returnasbuh1hhj9hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMS ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhj9hMS ubh)}(hraw_atomic64_sub_returnh]j)}(hj9h]hraw_atomic64_sub_return}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj :ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhj9hMS 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}]j9c.raw_atomic64_sub_returnasbuh1hhj%:ubjQ)}(h h]h }(hjJ:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%:ubj)}(hjh]hi}(hjX: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}(hjs:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetju:modnameN classnameNjwjz)}j}]j9c.raw_atomic64_sub_returnasbuh1hhjl: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)}(hj|h]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj!:ubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhj9hMS ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj9hMS ubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMS hj9hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMS hj:hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj9hMS 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)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj;h]hs64 i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMT hj;ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(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)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjO;h]h atomic64_t *v}(hjQ;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjM;ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMU hjI;ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjh;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjd;hMU hje;ubah}(h]h ]h"]h$]h&]uh1jhjI;ubeh}(h]h ]h"]h$]h&]uh1jhjd;hMU 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMW 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMX hj:ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj <ubh.}(hj <hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjP<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjR<modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_acquiresb!c.raw_atomic64_sub_return_acquireasbuh1hhjI<hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMn ubjQ)}(h h]h }(hjr<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjI<hhhjq<hMn ubh)}(hraw_atomic64_sub_return_acquireh]j)}(hjn<h]hraw_atomic64_sub_return_acquire}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjI<hhhjq<hMn 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}]jl<!c.raw_atomic64_sub_return_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}]jl<!c.raw_atomic64_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)}(hj|h]hv}(hj"=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjI<hhhjq<hMn ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjE<hhhjq<hMn ubah}(h]j@<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjq<hMn hjB<hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjK=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMn hjH=hhubah}(h]h ]h"]h$]h&]uh1j3hjB<hhhjq<hMn ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjc=jHjc=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. Safe to use in noinstr code; prefer atomic64_sub_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjm=h]h Parameters}(hjo=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk=ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMr hjg=ubj)}(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&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMo hj=ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMo hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMo 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMp hj=ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMp hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMp hj=ubeh}(h]h ]h"]h$]h&]uh1jhjg=ubjM)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMr hjg=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}(hj0>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh - }(hj>hhhNhNubj)}(h**i**h]hi}(hjB>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh) with acquire ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMq hjg=ubjM)}(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.}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMs hjg=ubjM)}(h **Return**h]j)}(hjl>h]hReturn}(hjn>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj>ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMu hjg=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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMv hjg=ubeh}(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}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_releasesb!c.raw_atomic64_sub_return_releaseasbuh1hhj>hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_sub_return_releaseh]j)}(hj>h]hraw_atomic64_sub_return_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_sub_return_releaseasbuh1hhj?ubjQ)}(h h]h }(hj6?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]hi}(hjD?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 reftargetja?modnameN classnameNjwjz)}j}]j>!c.raw_atomic64_sub_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)}(hj|h]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 subtract with release orderingh]h%atomic subtract with release ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj)}(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&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj)}(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&]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&]uh1jRhj9@ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj5@ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjP@hM hjQ@ubah}(h]h ]h"]h$]h&]uh1jhj5@ubeh}(h]h ]h"]h$]h&]uh1jhjP@hM hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hjv@h]h Description}(hjx@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt@ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubjM)}(hLSafe to use in noinstr code; prefer atomic64_sub_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_sub_return_release() elsewhere.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjAmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_relaxedsb!c.raw_atomic64_sub_return_relaxedasbuh1hhj5Ahhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj^AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5Ahhhj]AhM ubh)}(hraw_atomic64_sub_return_relaxedh]j)}(hjZAh]hraw_atomic64_sub_return_relaxed}(hjpAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlAubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5Ahhhj]AhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]jXA!c.raw_atomic64_sub_return_relaxedasbuh1hhjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]hi}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]jXA!c.raw_atomic64_sub_return_relaxedasbuh1hhjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hj|h]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubeh}(h]h ]h"]h$]h&]jjuh1j3hj5Ahhhj]AhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1Ahhhj]AhM ubah}(h]j,Aah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]AhM hj.Ahhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj7BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4Bhhubah}(h]h ]h"]h$]h&]uh1j3hj.Ahhhj]AhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOBjHjOBjIjJjKuh1hhhhjhNhNubj)}(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)}(hjYBh]h Parameters}(hj[BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWBubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjxBh]hs64 i}(hjzBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvBubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrBubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjrBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjoBubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjBubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjoBubeh}(h]h ]h"]h$]h&]uh1jhjSBubjM)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjChhhNhNubj)}(h**v**h]hv}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh to (}(hjChhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh - }(hjChhhNhNubj)}(h**i**h]hi}(hj.ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh) with relaxed ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubjM)}(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.}(hjGChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubjM)}(h **Return**h]j)}(hjXCh]hReturn}(hjZChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVCubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjnChhhNhNubj)}(h**v**h]hv}(hjvChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnCubh.}(hjnChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjSBubeh}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_subsbc.raw_atomic64_fetch_subasbuh1hhjChhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjChM ubh)}(hraw_atomic64_fetch_subh]j)}(hjCh]hraw_atomic64_fetch_sub}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjChM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jCc.raw_atomic64_fetch_subasbuh1hhjCubjQ)}(h h]h }(hj"DhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]hi}(hj0DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjKDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMDmodnameN classnameNjwjz)}j}]jCc.raw_atomic64_fetch_subasbuh1hhjDDubjQ)}(h h]h }(hjiDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDDubj)}(hjh]h*}(hjwDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDDubj)}(hj|h]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDDubeh}(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)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjDhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjChM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjDh]hs64 i}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjDubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhM hjDubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj'Eh]h atomic64_t *v}(hj)EhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%Eubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj!Eubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAtomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjNhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh to (}(hjNhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh + 1) with relaxed ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM# hjGNubjM)}(h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM% hjGNubjM)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM' hjGNubjM)}(hNothing.h]hNothing.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM( hjGNubeh}(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}(hjIOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKOmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_returnsbc.raw_atomic64_inc_returnasbuh1hhjBOhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM5 ubjQ)}(h h]h }(hjkOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBOhhhjjOhM5 ubh)}(hraw_atomic64_inc_returnh]j)}(hjgOh]hraw_atomic64_inc_return}(hj}OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyOubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBOhhhjjOhM5 ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]jeOc.raw_atomic64_inc_returnasbuh1hhjOubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hj|h]hv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubah}(h]h ]h"]h$]h&]jjuh1j3hjBOhhhjjOhM5 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>OhhhjjOhM5 ubah}(h]j9Oah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjOhM5 hj;Ohhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM5 hjOhhubah}(h]h ]h"]h$]h&]uh1j3hj;OhhhjjOhM5 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjPh]h Parameters}(hj!PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjPubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj>Ph]h atomic64_t *v}(hj@PhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjsRhhhNhNubj)}(h**v**h]hv}(hj{RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsRubh to (}(hjsRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsRubh + 1) with acquire ordering.}(hjsRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjQubjM)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMS hjQubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMU hjQubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMV hjQubeh}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_releasesb!c.raw_atomic64_inc_return_releaseasbuh1hhj Shhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMi ubjQ)}(h h]h }(hj3ShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Shhhj2ShMi ubh)}(hraw_atomic64_inc_return_releaseh]j)}(hj/Sh]hraw_atomic64_inc_return_release}(hjEShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjASubah}(h]h ](jjeh"]h$]h&]jjuh1hhj Shhhj2ShMi ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjcShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Subah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjeSmodnameN classnameNjwjz)}j}]j-S!c.raw_atomic64_inc_return_releaseasbuh1hhj\SubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\Subj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Subj)}(hj|h]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXSubah}(h]h ]h"]h$]h&]jjuh1j3hj Shhhj2ShMi ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhj2ShMi ubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2ShMi hjShhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMi hjShhubah}(h]h ]h"]h$]h&]uh1j3hjShhhj2ShMi ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMm hjSubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjTh]h atomic64_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMj hjTubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMj hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMj hjSubah}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjATh]h Description}(hjCThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Tubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMl hjSubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjWThhhNhNubj)}(h**v**h]hv}(hj_ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWTubh to (}(hjWThhhNhNubj)}(h**v**h]hv}(hjqThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWTubh + 1) with release ordering.}(hjWThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMk hjSubjM)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMm hjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMo 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMp hjSubeh}(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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_relaxedsb!c.raw_atomic64_inc_return_relaxedasbuh1hhjThhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjThhhjUhM ubh)}(hraw_atomic64_inc_return_relaxedh]j)}(hjUh]hraw_atomic64_inc_return_relaxed}(hj)UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Uubah}(h]h ](jjeh"]h$]h&]jjuh1hhjThhhjUhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjGUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjIUmodnameN classnameNjwjz)}j}]jU!c.raw_atomic64_inc_return_relaxedasbuh1hhj@UubjQ)}(h h]h }(hjeUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@Uubj)}(hjh]h*}(hjsUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Uubj)}(hj|h]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAtomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj;VhhhNhNubj)}(h**v**h]hv}(hjCVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Vubh to (}(hj;VhhhNhNubj)}(h**v**h]hv}(hjUVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Vubh + 1) with relaxed ordering.}(hj;VhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubjM)}(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.}(hjnVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Vubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubeh}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_incsbc.raw_atomic64_fetch_incasbuh1hhjVhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVhhhjVhM ubh)}(hraw_atomic64_fetch_inch]j)}(hjVh]hraw_atomic64_fetch_inc}(hj WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Wubah}(h]h ](jjeh"]h$]h&]jjuh1hhjVhhhjVhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj+WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Wubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-WmodnameN classnameNjwjz)}j}]jVc.raw_atomic64_fetch_incasbuh1hhj$WubjQ)}(h h]h }(hjIWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$Wubj)}(hjh]h*}(hjWWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Wubj)}(hj|h]hv}(hjdWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Wubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Wubah}(h]h ]h"]h$]h&]jjuh1j3hjVhhhjVhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhhhjVhM ubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjVhM hjVhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWhhubah}(h]h ]h"]h$]h&]uh1j3hjVhhhjVhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjWh]h atomic64_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubjM)}(h**Description**h]j)}(hj Xh]h Description}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hj'XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hj9XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh + 1) with full ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.}(hjRXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubjM)}(h **Return**h]j)}(hjcXh]hReturn}(hjeXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaXubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubjM)}(hThe original value of **v**.h](hThe original value of }(hjyXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyXubh.}(hjyXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjWubeh}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_acquiresb c.raw_atomic64_fetch_inc_acquireasbuh1hhjXhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjXhM ubh)}(hraw_atomic64_fetch_inc_acquireh]j)}(hjXh]hraw_atomic64_fetch_inc_acquire}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjXhM 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&]uh1jhj Yubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]jX c.raw_atomic64_fetch_inc_acquireasbuh1hhjYubjQ)}(h h]h }(hj-YhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hj;YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hj|h]hv}(hjHYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubah}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjXhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhjXhM ubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhM hjXhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjqYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjnYhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjXhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjYh]h atomic64_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhM hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjYubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh + 1) with acquire ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubjM)}(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.}(hj6ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubjM)}(h **Return**h]j)}(hjGZh]hReturn}(hjIZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEZubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubjM)}(hThe original value of **v**.h](hThe original value of }(hj]ZhhhNhNubj)}(h**v**h]hv}(hjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Zubh.}(hj]ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubeh}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_releasesb c.raw_atomic64_fetch_inc_releaseasbuh1hhjZhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhjZhM ubh)}(hraw_atomic64_fetch_inc_releaseh]j)}(hjZh]hraw_atomic64_fetch_inc_release}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZhhhjZhM ubj4)}(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&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]jZ c.raw_atomic64_fetch_inc_releaseasbuh1hhjZubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hj|h]hv}(hj,[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubah}(h]h ]h"]h$]h&]jjuh1j3hjZhhhjZhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZhhhjZhM ubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhM hjZhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjU[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjR[hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjZhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjm[jHjm[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_fetch_inc_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjw[h]h Parameters}(hjy[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju[ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjq[ubjM)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[ubjM)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[ubjM)}(h **Return**h]j)}(hj+\h]hReturn}(hj-\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)\ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[ubjM)}(hThe original value of **v**.h](hThe original value of }(hjA\hhhNhNubj)}(h**v**h]hv}(hjI\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA\ubh.}(hjA\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjq[ubeh}(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}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_relaxedsb c.raw_atomic64_fetch_inc_relaxedasbuh1hhj~\hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_inc_relaxedh]j)}(hj\h]hraw_atomic64_fetch_inc_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}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\modnameN classnameNjwjz)}j}]j\ c.raw_atomic64_fetch_inc_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)}(hj|h]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'hjz\hhhj\hM ubah}(h]ju\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\hM hjw\hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj9]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj6]hhubah}(h]h ]h"]h$]h&]uh1j3hjw\hhhj\hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjQ]jHjQ]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_fetch_inc_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&]uh1jhjY]ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjU]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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjt]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&]uh1jhjt]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM hjq]ubah}(h]h ]h"]h$]h&]uh1jhjU]ubjM)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjU]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjU]ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_inc_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_inc_relaxed() elsewhere.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjU]ubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ^ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjU]ubeh}(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}(hjf^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb^hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hju^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb^hhhjt^hM ubh)}(hraw_atomic64_dech]j)}(hraw_atomic64_dech]hraw_atomic64_dec}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjb^hhhjt^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)}jsj^sbc.raw_atomic64_decasbuh1hhj^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)}(hj|h]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubah}(h]h ]h"]h$]h&]jjuh1j3hjb^hhhjt^hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^^hhhjt^hM ubah}(h]jY^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjt^hM hj[^hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1j3hj[^hhhjt^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 relaxed ordering. Safe to use in noinstr code; prefer atomic64_dec() 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjK_h]h atomic64_t *v}(hjM_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjI_ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjE_ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjd_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`_hM hja_ubah}(h]h ]h"]h$]h&]uh1jhjE_ubeh}(h]h ]h"]h$]h&]uh1jhj`_hM hjB_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj&_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj&_ubjM)}(h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj&_ubjM)}(hNothing.h]hNothing.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (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}(hj(`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*`modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_returnsbc.raw_atomic64_dec_returnasbuh1hhj!`hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_returnh]j)}(hjF`h]hraw_atomic64_dec_return}(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_returnasbuh1hhjs`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)}(hj|h]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 full orderingh]h#atomic decrement with full ordering}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjah]h atomic64_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6ahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2ahM hj3aubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj2ahM hjaubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hjXah]h Description}(hjZahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVaubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj`ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjnahhhNhNubj)}(h**v**h]hv}(hjvahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnaubh to (}(hjnahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnaubh - 1) with full ordering.}(hjnahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj`ubjM)}(h **Return**h]j)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_acquiresb!c.raw_atomic64_dec_return_acquireasbuh1hhjbhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM) ubjQ)}(h h]h }(hj.bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhj-bhM) ubh)}(hraw_atomic64_dec_return_acquireh]j)}(hj*bh]hraw_atomic64_dec_return_acquire}(hj@bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:cubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM, hjbubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjRchhhNhNubj)}(h**v**h]hv}(hjZchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRcubh to (}(hjRchhhNhNubj)}(h**v**h]hv}(hjlchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRcubh - 1) with acquire ordering.}(hjRchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+ hjbubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM- hjbubjM)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjbubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjchhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjbubeh}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_releasesb!c.raw_atomic64_dec_return_releaseasbuh1hhjchhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMC ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjdhMC ubh)}(hraw_atomic64_dec_return_releaseh]j)}(hjdh]hraw_atomic64_dec_return_release}(hj$dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj dubah}(h]h ](jjeh"]h$]h&]jjuh1hhjchhhjdhMC ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjBdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?dubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDdmodnameN classnameNjwjz)}j}]j d!c.raw_atomic64_dec_return_releaseasbuh1hhj;dubjQ)}(h h]h }(hj`dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;dubj)}(hjh]h*}(hjndhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;dubj)}(hj|h]hv}(hj{dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;dubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7dubah}(h]h ]h"]h$]h&]jjuh1j3hjchhhjdhMC ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjdhMC ubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhMC hjchhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMC hjdhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhjdhMC ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjhNhNubj)}(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)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMG 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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMD hjdubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMD hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMD hjdubah}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hj eh]h Description}(hj"ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMF hjdubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj6ehhhNhNubj)}(h**v**h]hv}(hj>ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6eubh to (}(hj6ehhhNhNubj)}(h**v**h]hv}(hjPehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6eubh - 1) with release ordering.}(hj6ehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhME hjdubjM)}(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.}(hjiehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMG hjdubjM)}(h **Return**h]j)}(hjzeh]hReturn}(hj|ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxeubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMI hjdubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjehhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjdubeh}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_relaxedsb!c.raw_atomic64_dec_return_relaxedasbuh1hhjehhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM\ ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjehM\ ubh)}(hraw_atomic64_dec_return_relaxedh]j)}(hjeh]hraw_atomic64_dec_return_relaxed}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(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}(hj&fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#fubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(fmodnameN classnameNjwjz)}j}]je!c.raw_atomic64_dec_return_relaxedasbuh1hhjfubjQ)}(h h]h }(hjDfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjRfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hj_fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubah}(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 relaxed orderingh]h&atomic decrement with relaxed ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM\ hjfhhubah}(h]h ]h"]h$]h&]uh1j3hjehhhjehM\ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjfjHjfjIjJjKuh1hhhhjhNhNubj)}(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)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjfh]h atomic64_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjfubjM)}(h**Description**h]j)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM_ hjfubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjghhhNhNubj)}(h**v**h]hv}(hj"ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh to (}(hjghhhNhNubj)}(h**v**h]hv}(hj4ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh - 1) with relaxed ordering.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM^ hjfubjM)}(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.}(hjMghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM` hjfubjM)}(h **Return**h]j)}(hj^gh]hReturn}(hj`ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\gubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMb hjfubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjtghhhNhNubj)}(h**v**h]hv}(hj|ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtgubh.}(hjtghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMc hjfubeh}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_decsbc.raw_atomic64_fetch_decasbuh1hhjghhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMr ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjghMr ubh)}(hraw_atomic64_fetch_dech]j)}(hjgh]hraw_atomic64_fetch_dec}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjghMr ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj hmodnameN classnameNjwjz)}j}]jgc.raw_atomic64_fetch_decasbuh1hhjhubjQ)}(h h]h }(hj(hhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hj6hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hj|h]hv}(hjChhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgubah}(h]h ]h"]h$]h&]jjuh1j3hjghhhjghMr ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhjghMr ubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjghMr hjghhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjlhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMr hjihhhubah}(h]h ]h"]h$]h&]uh1j3hjghhhjghMr ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMv hjhubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjhh]h atomic64_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMs hjhubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMs hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMs hjhubah}(h]h ]h"]h$]h&]uh1jhjhubjM)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMu hjhubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh to (}(hjhhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh - 1) with full ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMt hjhubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.}(hj1ihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMv hjhubjM)}(h **Return**h]j)}(hjBih]hReturn}(hjDihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@iubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMx hjhubjM)}(hThe original value of **v**.h](hThe original value of }(hjXihhhNhNubj)}(h**v**h]hv}(hj`ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXiubh.}(hjXihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMy hjhubeh}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjimodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_acquiresb c.raw_atomic64_fetch_dec_acquireasbuh1hhjihhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjihM ubh)}(hraw_atomic64_fetch_dec_acquireh]j)}(hjih]hraw_atomic64_fetch_dec_acquire}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhjihM ubj4)}(h(atomic64_t *v)h]j:)}(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}]ji c.raw_atomic64_fetch_dec_acquireasbuh1hhjiubjQ)}(h h]h }(hj jhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hj|h]hv}(hj'jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiubah}(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 decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjPjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjMjhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjihM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjjHjhjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrjh]h Parameters}(hjtjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjljubj)}(hhh]j)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 hjjubah}(h]h ]h"]h$]h&]uh1jhjljubjM)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjljubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire 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 - 1) with acquire ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjljubjM)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjljubjM)}(h **Return**h]j)}(hj&kh]hReturn}(hj(khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$kubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjljubjM)}(hThe original value of **v**.h](hThe original value of }(hjAtomically updates **v** to (**v** - 1) with release 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 - 1) with release ordering.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjPlubjM)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjPlubjM)}(h **Return**h]j)}(hj mh]hReturn}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjPlubjM)}(hThe original value of **v**.h](hThe original value of }(hj mhhhNhNubj)}(h**v**h]hv}(hj(mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj mubh.}(hj mhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjPlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_dec_relaxed (C function) c.raw_atomic64_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_dec_relaxed (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_dec_relaxed(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjdmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjamubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_relaxedsb c.raw_atomic64_fetch_dec_relaxedasbuh1hhj]mhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]mhhhjmhM ubh)}(hraw_atomic64_fetch_dec_relaxedh]j)}(hjmh]hraw_atomic64_fetch_dec_relaxed}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]mhhhjmhM 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&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]jm c.raw_atomic64_fetch_dec_relaxedasbuh1hhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj|h]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubah}(h]h ]h"]h$]h&]jjuh1j3hj]mhhhjmhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYmhhhjmhM ubah}(h]jTmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmhM hjVmhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjnhhubah}(h]h ]h"]h$]h&]uh1j3hjVmhhhjmhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0njHj0njIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj:nh]h Parameters}(hjAtomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to (}(hjnhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh - 1) with relaxed ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4nubjM)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4nubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4nubjM)}(hThe original value of **v**.h](hThe original value of }(hjohhhNhNubj)}(h**v**h]hv}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj4nubeh}(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}(hjEohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjTohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAohhhjSohM ubh)}(hraw_atomic64_andh]j)}(hraw_atomic64_andh]hraw_atomic64_and}(hjfohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjboubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAohhhjSohM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j)}jsjhosbc.raw_atomic64_andasbuh1hhj~oubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~oubj)}(hjh]hi}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~oubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzoubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]joc.raw_atomic64_andasbuh1hhjoubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hj|h]hv}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzoubeh}(h]h ]h"]h$]h&]jjuh1j3hjAohhhjSohM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=ohhhjSohM ubah}(h]j8oah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjSohM hj:ohhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj0phhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj-phhubah}(h]h ]h"]h$]h&]uh1j3hj:ohhhjSohM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHpjHjHpjIjJjKuh1hhhhjhNhNubj)}(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)}(hjRph]h Parameters}(hjTphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPpubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjqph]hs64 i}(hjsphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjopubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjkpubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjkpubeh}(h]h ]h"]h$]h&]uh1jhjphM hjhpubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjph]h atomic64_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjpubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM hjhpubeh}(h]h ]h"]h$]h&]uh1jhjLpubjM)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjphhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh to (}(hjphhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh & }(hjphhhNhNubj)}(h**i**h]hi}(hj'qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh) with relaxed ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubjM)}(h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.}(hj@qhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubjM)}(h **Return**h]j)}(hjQqh]hReturn}(hjSqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOqubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubjM)}(hNothing.h]hNothing.}(hjgqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjLpubeh}(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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andsbc.raw_atomic64_fetch_andasbuh1hhjqhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqhhhjqhM ubh)}(hraw_atomic64_fetch_andh]j)}(hjqh]hraw_atomic64_fetch_and}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhhjqhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqmodnameN classnameNjwjz)}j}]jqc.raw_atomic64_fetch_andasbuh1hhjqubjQ)}(h h]h }(hj rhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]hi}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj2rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/rubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4rmodnameN classnameNjwjz)}j}]jqc.raw_atomic64_fetch_andasbuh1hhj+rubjQ)}(h h]h }(hjPrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+rubj)}(hjh]h*}(hj^rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+rubj)}(hj|h]hv}(hjkrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+rubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubeh}(h]h ]h"]h$]h&]jjuh1j3hjqhhhjqhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjqhM ubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhM hjqhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrhhubah}(h]h ]h"]h$]h&]uh1j3hjqhhhjqhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjrh]hs64 i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhM hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjrubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjsh]h atomic64_t *v}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj subah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjsubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj'shhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#shM hj$subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhj#shM hjrubeh}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hjIsh]h Description}(hjKshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGsubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubjM)}(h?Atomically updates **v** to (**v** & **i**) with full 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 & }(hj_shhhNhNubj)}(h**i**h]hi}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_subh) with full ordering.}(hj_shhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjrubeh}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj tubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_and_acquiresb c.raw_atomic64_fetch_and_acquireasbuh1hhjthhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj1thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhj0thMubh)}(hraw_atomic64_fetch_and_acquireh]j)}(hj-th]hraw_atomic64_fetch_and_acquire}(hjCthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?tubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhj0thMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjathhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^tubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjctmodnameN classnameNjwjz)}j}]j+t c.raw_atomic64_fetch_and_acquireasbuh1hhjZtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZtubj)}(hjh]hi}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVtubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j+t c.raw_atomic64_fetch_and_acquireasbuh1hhjtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj|h]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVtubeh}(h]h ]h"]h$]h&]jjuh1j3hjthhhj0thMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhj0thMubah}(h]jsah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0thMhjthhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhj0thMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"ujHj"ujIjJjKuh1hhhhjhNhNubj)}(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)}(hj,uh]h Parameters}(hj.uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*uubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&uubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjKuh]hs64 i}(hjMuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjEuubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjduhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`uhMhjauubah}(h]h ]h"]h$]h&]uh1jhjEuubeh}(h]h ]h"]h$]h&]uh1jhj`uhMhjBuubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjuh]h atomic64_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj~uubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhj~uubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjBuubeh}(h]h ]h"]h$]h&]uh1jhj&uubjM)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&uubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to (}(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh & }(hjuhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh) with acquire ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&uubjM)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&uubjM)}(h **Return**h]j)}(hj+vh]hReturn}(hj-vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)vubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&uubjM)}(hThe original value of **v**.h](hThe original value of }(hjAvhhhNhNubj)}(h**v**h]hv}(hjIvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAvubh.}(hjAvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj&uubeh}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_and_releasesb c.raw_atomic64_fetch_and_releaseasbuh1hhj~vhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~vhhhjvhMubh)}(hraw_atomic64_fetch_and_releaseh]j)}(hjvh]hraw_atomic64_fetch_and_release}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~vhhhjvhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]jv c.raw_atomic64_fetch_and_releaseasbuh1hhjvubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]hi}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj wmodnameN classnameNjwjz)}j}]jv c.raw_atomic64_fetch_and_releaseasbuh1hhjwubjQ)}(h h]h }(hjhjzubeh}(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}(hjn{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj{hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMMubjQ)}(h h]h }(hj}{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjj{hhhj|{hMMubh)}(hraw_atomic64_andnoth]j)}(hraw_atomic64_andnoth]hraw_atomic64_andnot}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjj{hhhj|{hMMubj4)}(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.raw_atomic64_andnotasbuh1hhj{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_andnotasbuh1hhj{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)}(hj|h]hv}(hj0|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{ubeh}(h]h ]h"]h$]h&]jjuh1j3hjj{hhhj|{hMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjf{hhhj|{hMMubah}(h]ja{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|{hMMhjc{hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjY|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMMhjV|hhubah}(h]h ]h"]h$]h&]uh1j3hjc{hhhj|{hMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjq|jHjq|jIjJjKuh1hhhhjhNhNubj)}(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)}(hj{|h]h Parameters}(hj}|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy|ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQhju|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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMNhj|ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(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)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMOhj|ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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&]uh1jhju|ubjM)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj }ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMQhju|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}(hjP}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$}ubh) with relaxed ordering.}(hj$}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMPhju|ubjM)}(h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.h]h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.}(hji}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMRhju|ubjM)}(h **Return**h]j)}(hjz}h]hReturn}(hj|}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx}ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMThju|ubjM)}(hNothing.h]hNothing.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMUhju|ubeh}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andnotsbc.raw_atomic64_fetch_andnotasbuh1hhj}hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMbubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj}hMbubh)}(hraw_atomic64_fetch_andnoth]j)}(hj}h]hraw_atomic64_fetch_andnot}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhj}hMbubj4)}(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_andnotasbuh1hhj ~ubjQ)}(h h]h }(hj2~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&]uh1jhjX~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]~modnameN classnameNjwjz)}j}]j}c.raw_atomic64_fetch_andnotasbuh1hhjT~ubjQ)}(h h]h }(hjy~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjT~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT~ubj)}(hj|h]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ~ubeh}(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]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMbhj~hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhj}hMbubeh}(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. Safe to use in noinstr code; prefer atomic64_fetch_andnot() 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMfhj~ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj~h]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMchj~ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMchjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMchj~ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj7h]h atomic64_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhj1ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMdhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMdhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubjM)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMfhj~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]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMehj~ubjM)}(hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMghj~ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMihj~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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMjhj~ubeh}(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)}(hubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_or (C function)c.raw_atomic64_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void raw_atomic64_or (s64 i, atomic64_t *v)h]h)}(h*void raw_atomic64_or(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_orh]j)}(hraw_atomic64_orh]hraw_atomic64_or}(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}(hjׇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԇubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjهmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_orasbuh1hhjЇ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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]jc.raw_atomic64_orasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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 OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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. Safe to use in noinstr code; prefer atomic64_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h s64 valueh]h s64 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(``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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed 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 relaxed ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMChj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMChjubeh}(h]h ]h"]h$]h&]uh1jhjǔubjM)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMEhjǔubjM)}(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}(hjhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMDhjǔubjM)}(h=Safe to use in noinstr code; prefer atomic64_xor() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMFhjǔubjM)}(h **Return**h]j)}(hj̕h]hReturn}(hjΕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʕubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMHhjǔubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMIhjǔubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic64_fetch_xor (C function)c.raw_atomic64_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_xor (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_xor(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_xorsbc.raw_atomic64_fetch_xorasbuh1hhj hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMRubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj5hMRubh)}(hraw_atomic64_fetch_xorh]j)}(hj2h]hraw_atomic64_fetch_xor}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj5hMRubj4)}(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}]j0c.raw_atomic64_fetch_xorasbuh1hhj_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j0c.raw_atomic64_fetch_xorasbuh1hhjubjQ)}(h h]h }(hj˖hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjٖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj5hMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj5hMRubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hMRhjhhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMRhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj5hMRubeh}(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. Safe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMVhj+ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjPh]hs64 i}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMShjJubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMShjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMShjGubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMThjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjGubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMVhj+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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMUhj+ubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMWhj+ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMYhj+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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMZhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_xor_acquire (C function) c.raw_atomic64_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_xor_acquiresb c.raw_atomic64_fetch_xor_acquireasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMmubh)}(hraw_atomic64_fetch_xor_acquireh]j)}(hjh]hraw_atomic64_fetch_xor_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMmubj4)}(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_xor_acquireasbuh1hhj՘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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j c.raw_atomic64_fetch_xor_acquireasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjјubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMmubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMmubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMmhj|hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMmhjhhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhMmubeh}(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. Safe to use in noinstr code; prefer atomic64_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMqhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjߙhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjۙhMnhjܙubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۙhMnhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhMohjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMqhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjPhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh to (}(hjPhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh ^ }(hjPhhhNhNubj)}(h**i**h]hi}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh) with acquire ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMphjubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMrhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMthjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_xor_release (C function) c.raw_atomic64_fetch_xor_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_xor_releasesb c.raw_atomic64_fetch_xor_releaseasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj!hMubh)}(hraw_atomic64_fetch_xor_releaseh]j)}(hjh]hraw_atomic64_fetch_xor_release}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj!hMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]j c.raw_atomic64_fetch_xor_releaseasbuh1hhjKubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hjh]hi}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubj:)}(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_fetch_xor_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjśhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjқhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubeh}(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 XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj!hMubeh}(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. Safe to use in noinstr code; prefer atomic64_fetch_xor_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj6ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƜubh ^ }(hjƜhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƜubh) with release ordering.}(hjƜhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_xor_relaxedsb c.raw_atomic64_fetch_xor_relaxedasbuh1hhjohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMubh)}(hraw_atomic64_fetch_xor_relaxedh]j)}(hjh]hraw_atomic64_fetch_xor_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhMubj4)}(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_xor_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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.raw_atomic64_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)}(hj|h]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhMubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhMubeh}(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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h s64 valueh]h s64 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(``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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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 relaxed ordering.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchgsbc.raw_atomic64_xchgasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hraw_atomic64_xchgh]j)}(hj h]hraw_atomic64_xchg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj 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}]jc.raw_atomic64_xchgasbuh1hhj7ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hj|h]hv}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(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_xchgasbuh1hhjubjQ)}(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&]noemphjjuh1j9hj3ubeh}(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 exchange with full orderingh]h"atomic exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 full ordering. Safe to use in noinstr code; prefer atomic64_xchg() elsewhere. **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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj#ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjBhhhNhNubah}(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)}(hjbh]hs64 new}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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}(hj͡hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_acquiresbc.raw_atomic64_xchg_acquireasbuh1hhjJhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjrhMubh)}(hraw_atomic64_xchg_acquireh]j)}(hjoh]hraw_atomic64_xchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjrhMubj4)}(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}]jmc.raw_atomic64_xchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjϢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjܢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}]jmc.raw_atomic64_xchg_acquireasbuh1hhjubjQ)}(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&]jjuh1j3hjJhhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjrhMubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjChhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(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)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(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&]uh1jhjiubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(hThe original value of **v**.h](hThe original value of }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_releasesbc.raw_atomic64_xchg_releaseasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjؤhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjפhMubh)}(hraw_atomic64_xchg_releaseh]j)}(hjԤh]hraw_atomic64_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjפhMubj4)}(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 reftargetj modnameN classnameNjwjz)}j}]jҤc.raw_atomic64_xchg_releaseasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]jҤc.raw_atomic64_xchg_releaseasbuh1hhjUubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(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 exchange with release orderingh]h%atomic exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjפ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 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)}(hjԥh]h Parameters}(hj֥hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҥubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj,h]hs64 new}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj&ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh with release ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjΥubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_relaxedsbc.raw_atomic64_xchg_relaxedasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj<hM ubh)}(hraw_atomic64_xchg_relaxedh]j)}(hj9h]hraw_atomic64_xchg_relaxed}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj<hM ubj4)}(h(atomic64_t *v, s64 new)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.raw_atomic64_xchg_relaxedasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjçmodnameN classnameNjwjz)}j}]j7c.raw_atomic64_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjߧhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubeh}(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 exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(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 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)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjXh]h atomic64_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjOubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 hjOubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj3ubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj3ubjM)}(hThe original value of **v**.h](hThe original value of }(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj3ubeh}(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)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchgsbc.raw_atomic64_cmpxchgasbuh1hhjyhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjhM ubh)}(hraw_atomic64_cmpxchgh]j)}(hjh]hraw_atomic64_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjhM 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}]jc.raw_atomic64_cmpxchgasbuh1hhj˩ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj˩ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˩ubj)}(hj|h]hv}(hj 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}]jc.raw_atomic64_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjǩubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(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&]jjuh1j3hjyhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhjhM ubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjrhhubj4)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjhM 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. 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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!hjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM"hj8ubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM"hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM"hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjwh]hs64 new}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM#hjqubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(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 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM)hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(0hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_acquireasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM=ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM=ubh)}(hraw_atomic64_cmpxchg_acquireh]j)}(hjh]hraw_atomic64_cmpxchg_acquire}(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_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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_cmpxchg_acquireasbuh1hhj;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_cmpxchg_acquireasbuh1hhjubjQ)}(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)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMDhjubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMFhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_releasesbc.raw_atomic64_cmpxchg_releaseasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMZubjQ)}(h h]h }(hjگhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjٯhMZubh)}(hraw_atomic64_cmpxchg_releaseh]j)}(hj֯h]hraw_atomic64_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjٯhMZubj4)}(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_releaseasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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_releaseasbuh1hhjWubjQ)}(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_releaseasbuh1hhjubjQ)}(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ٯhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjٯhMZubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjٯhMZhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjٯhMZubeh}(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 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)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubjM)}(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}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM^hjubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMahjubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMchjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMdhjubeh}(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}(hjԲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѲubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjֲmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_relaxedsbc.raw_atomic64_cmpxchg_relaxedasbuh1hhjͲhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjͲhhhjhMvubh)}(hraw_atomic64_cmpxchg_relaxedh]j)}(hjh]hraw_atomic64_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjͲhhhjhMvubj4)}(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_relaxedasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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_relaxedasbuh1hhjsubjQ)}(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 reftargetjijmodnameN classnameNjwjz)}j}]jc.raw_atomic64_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ͲhhhjhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjɲhhhjhMvubah}(h]jIJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMvhjƲhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMvhjhhubah}(h]h ]h"]h$]h&]uh1j3hjƲhhhjhMvubeh}(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 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)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMzhj4ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMwhjSubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMwhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMwhjPubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMxhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjPubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMyhjŴubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjŴubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjPubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM{hj4ubjM)}(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}(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 relaxed 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMzhj4ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM}hj4ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj4ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_try_cmpxchgasbuh1hhj%ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hj|h]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(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}]jHc.raw_atomic64_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)}(holdh]hold}(hjhhhNhNubah}(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}]jHc.raw_atomic64_try_cmpxchgasbuh1hhjжubjQ)}(h h]h }(hjhhhNhNubah}(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&]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}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj*hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjnh]h atomic64_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjeubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj޷ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjeubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubjM)}(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 (}(hj1hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh == }(hj1hhhNhNubj)}(h**old**h]hold}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh), atomically updates }(hj1hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh to }(hj1hhhNhNubj)}(h**new**h]hnew}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh with full ordering. Otherwise, }(hj1hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh is not modified, }(hj1hhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh$ is updated to the current value of }(hj1hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh#, and relaxed ordering is provided.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubjM)}(hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubjM)}(h **Return**h]j)}(hjϸh]hReturn}(hjѸhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͸ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubeh}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjAhMubh)}(h raw_atomic64_try_cmpxchg_acquireh]j)}(h raw_atomic64_try_cmpxchg_acquireh]h raw_atomic64_try_cmpxchg_acquire}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjAhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j)}jsjVsb"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(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_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&]noemphjjuh1j9hjhubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjAhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjAhMubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhMhj)hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjAhMubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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ʺhMhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhMhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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<hMhjubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh == }(hjxhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh), atomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to }(hjxhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh# with acquire ordering. Otherwise, }(hjxhhhNhNubj)}(h**v**h]hv}(hjȻhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh is not modified, }(hjxhhhNhNubj)}(h**old**h]hold}(hjڻhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh$ is updated to the current value of }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh#, and relaxed ordering is provided.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh if the exchange occurred, }(hj,hhhNhNubj)}(h **false**h]hfalse}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh otherwise.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhMubh)}(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&]jjuh1hhjwhhhjhMubj4)}(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_releaseasbuh1hhjubjQ)}(h h]h }(hjڼhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jּ"c.raw_atomic64_try_cmpxchg_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)}(holdh]hold}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]jּ"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj^ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhMubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjphhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjӽjHjӽjIjJjKuh1hhhhjhNhNubj)}(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)}(hjݽh]h Parameters}(hj߽hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۽ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hj5h]hs64 *old}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj/ubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjnh]hs64 new}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj׽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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjǾhhhNhNubah}(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 release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj׽ubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj׽ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh if the exchange occurred, }(hjshhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh otherwise.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjпhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjϿhMubh)}(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&]uh1jhj޿ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjϿ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)}jsjsb"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjPubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(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_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&]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 relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 *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}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjCh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj: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&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(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&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_sub_and_testh]j)}(hraw_atomic64_sub_and_testh]hraw_atomic64_sub_and_test}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]j)}jsj+sbc.raw_atomic64_sub_and_testasbuh1hhjAubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]hi}(hjvhhhNhNubah}(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}]jdc.raw_atomic64_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]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)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj4h]hs64 i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj.ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjmh]h atomic64_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjgubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh otherwise.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}]j)}jsjsbc.raw_atomic64_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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]j~ah ](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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM'hj+hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM'ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFjHjFjIjJjKuh1hhhhjhNhNubj)}(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)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+hjJubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM(hjiubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjfubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM*hjJubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM)hjJubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM+hjJubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM-hjJubjM)}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM.hjJubeh}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM;ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhM;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&]jjuh1hhjwhhhjhM;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)}jsjsbc.raw_atomic64_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjwhhhjhM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhM;ubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM;hjphhubj4)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM;hjhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM<hjYubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthM<hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM<hjVubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM>hj: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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM=hj:ubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMAhj: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&]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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMBhj:ubeh}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMOubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjxhMOubh)}(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&]jjuh1hhjghhhjxhMOubj4)}(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_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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjghhhjxhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjxhMOubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxhMOhj`hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMOhjRhhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhjxhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjmjHjmjIjJjKuh1hhhhjhNhNubj)}(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)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMShjqubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjqubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMShjqubjM)}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMRhjqubjM)}(hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMThjqubjM)}(h **Return**h]j)}(hjvh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMVhjqubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMWhjqubeh}(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)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh + }(hj$hhhNhNubj)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with release ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuubjM)}(hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic64_add_negative_relaxed (C function)#c.raw_atomic64_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_relaxed (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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_unlesssbc.raw_atomic64_fetch_add_unlessasbuh1hhjohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMubh)}(hraw_atomic64_fetch_add_unlessh]j)}(hjh]hraw_atomic64_fetch_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhMubj4)}(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_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]ha}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 uh](h)}(hhh]j)}(hs64h]hs64}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhj\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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjohhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhMubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhMubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hj2h]hs64 a}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjkh]hs64 u}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_add_unlessh]j)}(hraw_atomic64_add_unlessh]hraw_atomic64_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}]j)}jsjsbc.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhj-ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]ha}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 uh](h)}(hhh]j)}(hs64h]hs64}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjlh]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(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 unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(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_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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjJh]hs64 a}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjDubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh if }(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh was updated, }(hjvhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh otherwise.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_inc_not_zeroasbuh1hhjubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjQhhhNhNubah}(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 increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjwhhubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh% + 1) with full ordering. Otherwise, }(hj hhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]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&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}jsj sb"c.raw_atomic64_inc_unless_negativeasbuh1hhj#ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hj|h]hv}(hjehhhNhNubah}(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)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(hjLhhhNhNubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsj!sb"c.raw_atomic64_dec_unless_positiveasbuh1hhj7ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hj|h]hv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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 (}(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh <= 0), atomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh% - 1) with full ordering. Otherwise, }(hj4hhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh2 is not modified and relaxed ordering is provided.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_if_positivesbc.raw_atomic64_dec_if_positiveasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj7hM8ubh)}(hraw_atomic64_dec_if_positiveh]j)}(hj4h]hraw_atomic64_dec_if_positive}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj7hM8ubj4)}(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.raw_atomic64_dec_if_positiveasbuh1hhjaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj7hM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj7hM8ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hM8hjhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hM8ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-arch-fallback.hhM9hjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM9hjubah}(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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh% - 1) 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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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&]uh1jLhn/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj;hKubh)}(hraw_atomic_long_readh]j)}(hraw_atomic_long_readh]hraw_atomic_long_read}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj;hKubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjfubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubh)}(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)}jsjPsbc.raw_atomic_long_readasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubah}(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!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:105: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhj;hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]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:105: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]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:105: ./include/linux/atomic/atomic-long.hhKhj'ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhj$ubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(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:105: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhK-ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK-ubh)}(hraw_atomic_long_read_acquireh]j)}(hraw_atomic_long_read_acquireh]hraw_atomic_long_read_acquire}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK-ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hj h]hconst}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubh)}(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)}jsj*sbc.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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhK-hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK-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:105: ./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)}(hjh]hconst atomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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&]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)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhK0hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh with acquire ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.hhK3hjubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhKAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKAubh)}(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&]jjuh1hhjhhhjhKAubj4)}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_setasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong ih](j)}(hlongh]hlong}(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&]jjuh1j3hjhhhjhKAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKAhjhhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhKAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKAubeh}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhKBhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hj3h]hlong i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKChj-ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhKChjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKChjubeh}(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:105: ./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:105: ./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:105: ./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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhKVubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhKVubh)}(hraw_atomic_long_set_releaseh]j)}(hraw_atomic_long_set_releaseh]hraw_atomic_long_set_release}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhKVubj4)}(h(atomic_long_t *v, long i)h](j:)}(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)}jsj0sbc.raw_atomic_long_set_releaseasbuh1hhjFubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(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&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhKVubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKVhjhhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhKVhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKVubeh}(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)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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)}(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:105: ./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&]uh1jLhj;hKWhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKWhjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hj_h]hlong i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKXhjYubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthKXhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKXhjubeh}(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:105: ./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:105: ./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:105: ./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:105: ./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:105: ./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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKkubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhKkubh)}(hraw_atomic_long_addh]j)}(hraw_atomic_long_addh]hraw_atomic_long_add}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhKkubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(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:)}(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.raw_atomic_long_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjGhKkubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhKkubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhKkhj.hhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhKkubeh}(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. Safe to use in noinstr code; prefer atomic_long_add() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKohj-ubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKlhjLubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghKlhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKlhjIubj)}(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:105: ./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&]uh1jhjhKmhjIubeh}(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:105: ./include/linux/atomic/atomic-long.hhKohj-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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKnhj-ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhKphj-ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKrhj-ubjM)}(hNothing.h]hNothing.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKshj-ubeh}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjhKubh)}(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&]jjuh1hhjshhhjhKubj4)}(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_add_returnasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjshhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjhKubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjlhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjhNhNubj)}(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)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjkubj)}(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:105: ./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:105: ./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&]uh1jhjkubjM)}(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:105: ./include/linux/atomic/atomic-long.hhKhjkubjM)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjFhhhNhNubah}(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:105: ./include/linux/atomic/atomic-long.hhKhjkubjM)}(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:105: ./include/linux/atomic/atomic-long.hhKhjkubjM)}(h **Return**h]j)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjkubjM)}(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:105: ./include/linux/atomic/atomic-long.hhKhjkubeh}(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:105: ./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}(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.raw_atomic_long_add_return_acquireasbuh1hhj4ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hj|h]hv}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(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:105: ./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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2hhhNhNubah}(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)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hKubh)}(h"raw_atomic_long_add_return_releaseh]j)}(h"raw_atomic_long_add_return_releaseh]h"raw_atomic_long_add_return_release}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj%hKubj4)}(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.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)}(hj|h]hv}(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)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj%hKubeh}(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 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)}(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:105: ./include/linux/atomic/atomic-long.hhKhj ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj0h]hlong i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhj*ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhKhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKhj'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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjcubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj'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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhKhj 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:105: ./include/linux/atomic/atomic-long.hhKhj 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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjuhKubh)}(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&]jjuh1hhjchhhjuhKubj4)}(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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjchhhjuhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjuhKubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhKhj\hhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhKhj<hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhjuhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhj[ubj)}(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&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjzubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhjwubj)}(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:105: ./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&]uh1jhjhKhjwubeh}(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:105: ./include/linux/atomic/atomic-long.hhKhj[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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhj[ubjM)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhj[ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhj[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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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:105: ./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&]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)}jsjsbc.raw_atomic_long_fetch_addasbuh1hhj$ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hj|h]hv}(hjfhhhNhNubah}(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:105: ./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:105: ./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:105: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h!raw_atomic_long_fetch_add_acquireh]j)}(h!raw_atomic_long_fetch_add_acquireh]h!raw_atomic_long_fetch_add_acquire}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@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:)}(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*sb#c.raw_atomic_long_fetch_add_acquireasbuh1hhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(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 acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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:105: ./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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hKhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjYh]hatomic_long_t *v}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjSubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhKhjubeh}(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:105: ./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:105: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehKubh)}(h!raw_atomic_long_fetch_add_releaseh]j)}(h!raw_atomic_long_fetch_add_releaseh]h!raw_atomic_long_fetch_add_release}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjehKubj4)}(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)}jsjzsb#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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjehKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjehKubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehKhjLhhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhKhj,hhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjehKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjhNhNubj)}(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)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjKubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjph]hlong i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhKhjjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjgubj)}(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:105: ./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&]uh1jhjhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjKubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjKubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjKubjM)}(h **Return**h]j)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjKubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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:105: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjVhhhNhNubah}(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 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:105: ./include/linux/atomic/atomic-long.hhMhj|hhubah}(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:105: ./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:105: ./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:105: ./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)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh to (}(hjJhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh + }(hjJhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh) with relaxed ordering.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM(ubh)}(hraw_atomic_long_subh]j)}(hraw_atomic_long_subh]hraw_atomic_long_sub}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]hi}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(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.raw_atomic_long_subasbuh1hhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(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 relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM(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)}(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:105: ./include/linux/atomic/atomic-long.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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM)hj ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(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)hjubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM*hjCubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^hM*hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM*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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhM/hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM=ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhjChM=ubh)}(hraw_atomic_long_sub_returnh]j)}(hraw_atomic_long_sub_returnh]hraw_atomic_long_sub_return}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhjChM=ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubj:)}(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_sub_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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)}(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:105: ./include/linux/atomic/atomic-long.hhM=hj hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhjChM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj%jHj%jIjJjKuh1hhhhjhNhNubj)}(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)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMAhj)ubj)}(hhh](j)}(h"``long i`` long value to subtract 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:105: ./include/linux/atomic/atomic-long.hhM>hjHubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM>hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM>hjEubj)}(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:105: ./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?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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM@hj)ubjM)}(hGSafe to use in noinstr code; prefer atomic_long_sub_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_sub_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMBhj)ubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMDhj)ubjM)}(hThe updated value of **v**.h](hThe updated 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:105: ./include/linux/atomic/atomic-long.hhMEhj)ubeh}(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:105: ./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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj4hhhNhNubah}(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'hj}hhhjhMRubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMRhjzhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMRhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMVhjyubj)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMThjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMVhjyubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire 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 acquire ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMUhjyubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMWhjyubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMYhjyubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMZhjyubeh}(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:105: ./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}(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&]noemphjjuh1j9hj ubj:)}(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)}jsjsb$c.raw_atomic_long_sub_return_releaseasbuh1hhjBubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMkhjubj)}(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:105: ./include/linux/atomic/atomic-long.hhMhhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(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)}(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:105: ./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&]uh1jLhj<hMihj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMihjubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMkhjubjM)}(hBAtomically updates **v** to (**v** - **i**) 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 - }(hjxhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh) with release ordering.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM|ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj3hM|ubh)}(h"raw_atomic_long_sub_return_relaxedh]j)}(h"raw_atomic_long_sub_return_relaxedh]h"raw_atomic_long_sub_return_relaxed}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj3hM|ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^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&]noemphjjuh1j9hjZubj:)}(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)}jsjHsb$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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj3hM|ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj3hM|ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hM|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:105: ./include/linux/atomic/atomic-long.hhM|hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj3hM|ubeh}(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 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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(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:105: ./include/linux/atomic/atomic-long.hhM}hj8 ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjS hM}hjT ubah}(h]h ]h"]h$]h&]uh1jhj8 ubeh}(h]h ]h"]h$]h&]uh1jhjS hM}hj5 ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjw h]hatomic_long_t *v}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM~hjq 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&]uh1jhjq ubeh}(h]h ]h"]h$]h&]uh1jhj hM~hj5 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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj4 hhhNhNubj)}(h**v**h]hv}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4 ubh.}(hj4 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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 (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}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjq hhhj hMubh)}(hraw_atomic_long_fetch_subh]j)}(hraw_atomic_long_fetch_subh]hraw_atomic_long_fetch_sub}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjq 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 sbc.raw_atomic_long_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)}(hj|h]hv}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(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 subtract with full orderingh]h"atomic subtract with full ordering}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjJ hhubah}(h]h ]h"]h$]h&]uh1j3hjj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGje jHje jIjJjKuh1hhhhjhNhNubj)}(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)}(hjo h]h Parameters}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhji ubj)}(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:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]jM)}(hlong value to subtracth]hlong 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_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:105: ./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&]uh1jhji 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:105: ./include/linux/atomic/atomic-long.hhMhji 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}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - }(hj hhhNhNubj)}(h**i**h]hi}(hjD 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:105: ./include/linux/atomic/atomic-long.hhMhji ubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhji ubjM)}(h **Return**h]j)}(hjn h]hReturn}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhji 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:105: ./include/linux/atomic/atomic-long.hhMhji ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_acquireh]j)}(h!raw_atomic_long_fetch_sub_acquireh]h!raw_atomic_long_fetch_sub_acquire}(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}(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj; modnameN classnameNjwjz)}j}]j)}jsj sb#c.raw_atomic_long_fetch_sub_acquireasbuh1hhj2 ubjQ)}(h h]h }(hjY hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2 ubj)}(hjh]h*}(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubj)}(hj|h]hv}(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 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 acquire orderingh]h%atomic subtract with acquire ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj hhubah}(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 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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(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:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]jM)}(hlong value to subtracth]hlong 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_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:105: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire 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 - }(hjhhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh) with acquire ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hMubh)}(h!raw_atomic_long_fetch_sub_releaseh]j)}(h!raw_atomic_long_fetch_sub_releaseh]h!raw_atomic_long_fetch_sub_release}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]hi}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubj:)}(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)}jsj8sb#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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubeh}(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%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:105: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hMubeh}(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_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]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:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj.h]hlong i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj(ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjgh]hatomic_long_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjaubj)}(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&]uh1jhjaubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjshMubh)}(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&]jjuh1hhjahhhjshMubj4)}(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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjshMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjshMubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMhjZhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjshMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjYubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj~h]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjxubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(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:105: ./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&]uh1jhjhMhjuubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjYubjM)}(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}(hj4hhhNhNubah}(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:105: ./include/linux/atomic/atomic-long.hhMhjYubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjYubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjYubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjYubeh}(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:105: ./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_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(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)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMhjuubj)}(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:105: ./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&]uh1jhjuubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(h **Return**h]j)}(hj/h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(hNothing.h]hNothing.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjhMubh)}(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&]jjuh1hhjphhhjhMubj4)}(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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjphhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlhhhjhMubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjihhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj4ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjYh]hatomic_long_t *v}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjSubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj4ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhj4ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhj4ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhj4ubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj4ubeh}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM ubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjShM ubh)}(h"raw_atomic_long_inc_return_acquireh]j)}(h"raw_atomic_long_inc_return_acquireh]h"raw_atomic_long_inc_return_acquire}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjShM 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)}jsjhsb$c.raw_atomic_long_inc_return_acquireasbuh1hhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubah}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjShM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhjShM ubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShM hj:hhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj:hhhjShM 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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj$ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjChhhNhNubah}(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&]uh1jhjubjM)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with acquire ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM!ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hM!ubh)}(h"raw_atomic_long_inc_return_releaseh]j)}(h"raw_atomic_long_inc_return_releaseh]h"raw_atomic_long_inc_return_release}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsj9sb$c.raw_atomic_long_inc_return_releaseasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubah}(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 release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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&]uh1jhjubjM)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM$hjubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with release ordering.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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:105: ./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:105: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(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_inc_return_relaxedasbuh1hhj ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj|h]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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:105: ./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:105: ./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:105: ./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)}(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:105: ./include/linux/atomic/atomic-long.hhM8hjubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM9hjubjM)}(h **Return**h]j)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM;hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjwhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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_incasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMIhjYhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjtjHjtjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMMhjxubj)}(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:105: ./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&]uh1jhjxubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMLhjxubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMKhjxubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMMhjxubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMOhjxubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMPhjxubeh}(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:105: ./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)}(hj|h]hv}(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]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM]hj~hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM]hj*hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhjhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMahjIubj)}(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}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM^hjhubj)}(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&]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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM`hjIubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM_hjIubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMahjIubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMchjIubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMdhjIubeh}(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}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMqubjQ)}(h h]h }(hji hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV hhhjh hMqubh)}(h!raw_atomic_long_fetch_inc_releaseh]j)}(h!raw_atomic_long_fetch_inc_releaseh]h!raw_atomic_long_fetch_inc_release}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjV hhhjh hMqubj4)}(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_inc_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)}(hj|h]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjV hhhjh hMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjR hhhjh hMqubah}(h]jM ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjh hMqhjO hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMqhj hhubah}(h]h ]h"]h$]h&]uh1j3hjO hhhjh hMqubeh}(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. 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:105: ./include/linux/atomic/atomic-long.hhMuhj!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}(hjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=!ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMrhj9!ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjX!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjT!hMrhjU!ubah}(h]h ]h"]h$]h&]uh1jhj9!ubeh}(h]h ]h"]h$]h&]uh1jhjT!hMrhj6!ubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMthj!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:105: ./include/linux/atomic/atomic-long.hhMshj!ubjM)}(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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMuhj!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:105: ./include/linux/atomic/atomic-long.hhMwhj!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:105: ./include/linux/atomic/atomic-long.hhMxhj!ubeh}(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}(hj+"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'"hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj:"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'"hhhj9"hMubh)}(h!raw_atomic_long_fetch_inc_relaxedh]j)}(h!raw_atomic_long_fetch_inc_relaxedh]h!raw_atomic_long_fetch_inc_relaxed}(hjL"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'"hhhj9"hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjk"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjm"modnameN classnameNjwjz)}j}]j)}jsjN"sb#c.raw_atomic_long_fetch_inc_relaxedasbuh1hhjd"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)}(hj|h]hv}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`"ubah}(h]h ]h"]h$]h&]jjuh1j3hj'"hhhj9"hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#"hhhj9"hMubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9"hMhj "hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1j3hj "hhhj9"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. 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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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)}(hjK#h]h Description}(hjM#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI#ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hja#hhhNhNubj)}(h**v**h]hv}(hji#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja#ubh to (}(hja#hhhNhNubj)}(h**v**h]hv}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja#ubh + 1) with relaxed ordering.}(hja#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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_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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj $hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj $hMubh)}(hraw_atomic_long_dech]j)}(hraw_atomic_long_dech]hraw_atomic_long_dec}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj $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&]uh1jhj9$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>$modnameN classnameNjwjz)}j}]j)}jsj$sbc.raw_atomic_long_decasbuh1hhj5$ubjQ)}(h h]h }(hj\$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5$ubj)}(hjh]h*}(hjj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5$ubj)}(hj|h]hv}(hjw$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1$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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj $hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj$ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj2%hhhNhNubj)}(h**v**h]hv}(hj:%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2%ubh to (}(hj2%hhhNhNubj)}(h**v**h]hv}(hjL%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2%ubh - 1) with relaxed ordering.}(hj2%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj$ubjM)}(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.}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj$ubjM)}(h **Return**h]j)}(hjv%h]hReturn}(hjx%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt%ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj$ubjM)}(hNothing.h]hNothing.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hMubh)}(hraw_atomic_long_dec_returnh]j)}(hraw_atomic_long_dec_returnh]hraw_atomic_long_dec_return}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%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.raw_atomic_long_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)}(hj|h]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 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:105: ./include/linux/atomic/atomic-long.hhMhj\&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw&jHjw&jIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj{&ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhj{&ubjM)}(h **Return**h]j)}(hj5'h]hReturn}(hj7'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3'ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj'hMubh)}(h"raw_atomic_long_dec_return_acquireh]j)}(h"raw_atomic_long_dec_return_acquireh]h"raw_atomic_long_dec_return_acquire}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj'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'sb$c.raw_atomic_long_dec_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)}(hj|h]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 decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj0(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj-(hhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhj'hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjH(jHjH(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_dec_return_acquire() elsewhere. **Return** The updated 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:105: ./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:105: ./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(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjL(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:105: ./include/linux/atomic/atomic-long.hhMhjL(ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjL(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:105: ./include/linux/atomic/atomic-long.hhMhjL(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hj])hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjl)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY)hhhjk)hMubh)}(h"raw_atomic_long_dec_return_releaseh]j)}(h"raw_atomic_long_dec_return_releaseh]h"raw_atomic_long_dec_return_release}(hj~)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjY)hhhjk)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)sb$c.raw_atomic_long_dec_return_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)}(hj|h]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 decrement with release orderingh]h&atomic decrement with release ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1j3hjR)hhhjk)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 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}(hj%*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!*ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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)}(hjB*h]hatomic_long_t *v}(hjD*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@*ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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&]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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj*ubjM)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hj.+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*+hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj=+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*+hhhj<+hMubh)}(h"raw_atomic_long_dec_return_relaxedh]j)}(h"raw_atomic_long_dec_return_relaxedh]h"raw_atomic_long_dec_return_relaxed}(hjO+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*+hhhj<+hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjn+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjp+modnameN classnameNjwjz)}j}]j)}jsjQ+sb$c.raw_atomic_long_dec_return_relaxedasbuh1hhjg+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)}(hj|h]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc+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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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** ``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)}(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:105: ./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:105: ./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)}(hjN,h]h Description}(hjP,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL,ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj+ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed 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 relaxed ordering.}(hjd,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj -hMubh)}(hraw_atomic_long_fetch_dech]j)}(hraw_atomic_long_fetch_dech]hraw_atomic_long_fetch_dec}(hj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj -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 reftargetjA-modnameN classnameNjwjz)}j}]j)}jsj"-sbc.raw_atomic_long_fetch_decasbuh1hhj8-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)}(hj|h]hv}(hjz-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4-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 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:105: ./include/linux/atomic/atomic-long.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1j3hj,hhhj -hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./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:105: ./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$]Zh&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj-ubjM)}(h;Atomically updates **v** to (**v** - 1) with full 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 full ordering.}(hj5.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj-ubjM)}(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.}(hjh.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj-ubjM)}(h **Return**h]j)}(hjy.h]hReturn}(hj{.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw.ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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_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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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&]jjuh1hhj.hhhj.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.sb#c.raw_atomic_long_fetch_dec_acquireasbuh1hhj /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)}(hj|h]hv}(hjK/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 acquire orderingh]h&atomic decrement with acquire ordering}(hjt/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjq/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 **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:105: ./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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj/ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh to (}(hj0hhhNhNubj)}(h**v**h]hv}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh - 1) with acquire ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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.}(hj90hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj/ubjM)}(h **Return**h]j)}(hjJ0h]hReturn}(hjL0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH0ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj/ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`0hhhNhNubj)}(h**v**h]hv}(hjh0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`0ubh.}(hj`0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM%ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hM%ubh)}(h!raw_atomic_long_fetch_dec_releaseh]j)}(h!raw_atomic_long_fetch_dec_releaseh]h!raw_atomic_long_fetch_dec_release}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hM%ubj4)}(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&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsj0sb#c.raw_atomic_long_fetch_dec_releaseasbuh1hhj0ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hj|h]hv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj0hM%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj0hM%ubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hM%hj0hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjE1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM%hjB1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hM%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]1jHj]1jIjJjKuh1hhhhjhNhNubj)}(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)}(hjg1h]h Parameters}(hji1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje1ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM)hja1ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj1h]hatomic_long_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM&hj1ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hM&hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM&hj}1ubah}(h]h ]h"]h$]h&]uh1jhja1ubjM)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM(hja1ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh to (}(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh - 1) with release ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM'hja1ubjM)}(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 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM)hja1ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM+hja1ubjM)}(hThe original value of **v**.h](hThe original value of }(hj12hhhNhNubj)}(h**v**h]hv}(hj92hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj12ubh.}(hj12hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM,hja1ubeh}(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}(hjr2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM9ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjn2hhhj2hM9ubh)}(h!raw_atomic_long_fetch_dec_relaxedh]j)}(h!raw_atomic_long_fetch_dec_relaxedh]h!raw_atomic_long_fetch_dec_relaxed}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjn2hhhj2hM9ubj4)}(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)}jsj2sb#c.raw_atomic_long_fetch_dec_relaxedasbuh1hhj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hj|h]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubah}(h]h ]h"]h$]h&]jjuh1j3hjn2hhhj2hM9ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjj2hhhj2hM9ubah}(h]je2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hM9hjg2hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM9hj3hhubah}(h]h ]h"]h$]h&]uh1j3hjg2hhhj2hM9ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.3jHj.3jIjJjKuh1hhhhjhNhNubj)}(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)}(hj83h]h Parameters}(hj:3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj63ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM=hj23ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjW3h]hatomic_long_t *v}(hjY3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjU3ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM:hjQ3ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjl3hM:hjm3ubah}(h]h ]h"]h$]h&]uh1jhjQ3ubeh}(h]h ]h"]h$]h&]uh1jhjl3hM:hjN3ubah}(h]h ]h"]h$]h&]uh1jhj23ubjM)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM<hj23ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh to (}(hj3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh - 1) with relaxed ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM;hj23ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM=hj23ubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM?hj23ubjM)}(hThe original value of **v**.h](hThe original value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM@hj23ubeh}(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}(hjC4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?4hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMMubjQ)}(h h]h }(hjR4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?4hhhjQ4hMMubh)}(hraw_atomic_long_andh]j)}(hraw_atomic_long_andh]hraw_atomic_long_and}(hjd4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?4hhhjQ4hMMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|4ubj)}(hjh]hi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjx4ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjf4sbc.raw_atomic_long_andasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hj|h]hv}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjx4ubeh}(h]h ]h"]h$]h&]jjuh1j3hj?4hhhjQ4hMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;4hhhjQ4hMMubah}(h]j64ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQ4hMMhj84hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMMhj5hhubah}(h]h ]h"]h$]h&]uh1j3hj84hhhjQ4hMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj35jHj35jIjJjKuh1hhhhjhNhNubj)}(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)}(hj=5h]h Parameters}(hj?5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;5ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMQhj75ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj\5h]hlong i}(hj^5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZ5ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMNhjV5ubj)}(hhh]jM)}(h long valueh]h long value}(hju5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjq5hMNhjr5ubah}(h]h ]h"]h$]h&]uh1jhjV5ubeh}(h]h ]h"]h$]h&]uh1jhjq5hMNhjS5ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj5h]hatomic_long_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMOhj5ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMOhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMOhjS5ubeh}(h]h ]h"]h$]h&]uh1jhj75ubjM)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMQhj75ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj5hhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh to (}(hj5hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh & }(hj5hhhNhNubj)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh) with relaxed ordering.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMPhj75ubjM)}(h@Safe to use in noinstr code; prefer atomic_long_and() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_and() elsewhere.}(hj+6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMRhj75ubjM)}(h **Return**h]j)}(hj<6h]hReturn}(hj>6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:6ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMThj75ubjM)}(hNothing.h]hNothing.}(hjR6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMUhj75ubeh}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}6hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMbubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}6hhhj6hMbubh)}(hraw_atomic_long_fetch_andh]j)}(hraw_atomic_long_fetch_andh]hraw_atomic_long_fetch_and}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}6hhhj6hMbubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]hi}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsj6sbc.raw_atomic_long_fetch_andasbuh1hhj6ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hj#7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hj|h]hv}(hj07hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubeh}(h]h ]h"]h$]h&]jjuh1j3hj}6hhhj6hMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjy6hhhj6hMbubah}(h]jt6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMbhjv6hhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjY7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMbhjV7hhubah}(h]h ]h"]h$]h&]uh1j3hjv6hhhj6hMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjq7jHjq7jIjJjKuh1hhhhjhNhNubj)}(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)}(hj{7h]h Parameters}(hj}7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy7ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMfhju7ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj7h]hlong i}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMchj7ubj)}(hhh]jM)}(h long valueh]h long value}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMchj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMchj7ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj7h]hatomic_long_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMdhj7ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMdhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMdhj7ubeh}(h]h ]h"]h$]h&]uh1jhju7ubjM)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMfhju7ubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj$8hhhNhNubj)}(h**v**h]hv}(hj,8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$8ubh to (}(hj$8hhhNhNubj)}(h**v**h]hv}(hj>8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$8ubh & }(hj$8hhhNhNubj)}(h**i**h]hi}(hjP8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$8ubh) with full ordering.}(hj$8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMehju7ubjM)}(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.}(hji8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMghju7ubjM)}(h **Return**h]j)}(hjz8h]hReturn}(hj|8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMihju7ubjM)}(hThe original value of **v**.h](hThe original value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMjhju7ubeh}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhj8hMwubh)}(h!raw_atomic_long_fetch_and_acquireh]j)}(h!raw_atomic_long_fetch_and_acquireh]h!raw_atomic_long_fetch_and_acquire}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhj8hMwubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 9ubj)}(hjh]hi}(hj*9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjE9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjG9modnameN classnameNjwjz)}j}]j)}jsj8sb#c.raw_atomic_long_fetch_and_acquireasbuh1hhj>9ubjQ)}(h h]h }(hje9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>9ubj)}(hjh]h*}(hjs9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>9ubj)}(hj|h]hv}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj8hhhj8hMwubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhj8hMwubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hMwhj8hhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwhj9hhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhj8hMwubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM{hj9ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj9h]hlong i}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMxhj9ubj)}(hhh]jM)}(h long valueh]h long value}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMxhj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMxhj9ubj)}(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:105: ./include/linux/atomic/atomic-long.hhMyhj:ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8:hMyhj9:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj8:hMyhj9ubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM{hj9ubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjt:hhhNhNubj)}(h**v**h]hv}(hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt:ubh to (}(hjt:hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt:ubh & }(hjt:hhhNhNubj)}(h**i**h]hi}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt:ubh) with acquire ordering.}(hjt:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMzhj9ubjM)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM|hj9ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM~hj9ubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhj9ubeh}(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&]uh1jhj;hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj0;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhj/;hMubh)}(h!raw_atomic_long_fetch_and_releaseh]j)}(h!raw_atomic_long_fetch_and_releaseh]h!raw_atomic_long_fetch_and_release}(hjB;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&]uh1jhjZ;ubjQ)}(h h]h }(hjl;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ;ubj)}(hjh]hi}(hjz;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjV;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)}jsjD;sb#c.raw_atomic_long_fetch_and_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)}(hj|h]hv}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjV;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 release orderingh]h(atomic bitwise AND with release ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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&]uh1jRhj8<ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj4<ubj)}(hhh]jM)}(h long valueh]h long value}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjO<hMhjP<ubah}(h]h ]h"]h$]h&]uh1jhj4<ubeh}(h]h ]h"]h$]h&]uh1jhjO<hMhj1<ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]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:105: ./include/linux/atomic/atomic-long.hhMhjm<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&]uh1jhjm<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj1<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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj<ubjM)}(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:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj<ubjM)}(hThe original value of **v**.h](hThe original value of }(hj0=hhhNhNubj)}(h**v**h]hv}(hj8=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0=ubh.}(hj0=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjq=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm=hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjm=hhhj=hMubh)}(h!raw_atomic_long_fetch_and_relaxedh]j)}(h!raw_atomic_long_fetch_and_relaxedh]h!raw_atomic_long_fetch_and_relaxed}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjm=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.raw_atomic_long_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)}(hj|h]hv}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjm=hhhj=hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hji=hhhj=hMubah}(h]jd=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hMhjf=hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjI>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjF>hhubah}(h]h ]h"]h$]h&]uh1j3hjf=hhhj=hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGja>jHja>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)}(hjk>h]h Parameters}(hjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji>ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhje>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:105: ./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:105: ./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&]uh1jhje>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:105: ./include/linux/atomic/atomic-long.hhMhje>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:105: ./include/linux/atomic/atomic-long.hhMhje>ubjM)}(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.}(hjY?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhje>ubjM)}(h **Return**h]j)}(hjj?h]hReturn}(hjl?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh?ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhje>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:105: ./include/linux/atomic/atomic-long.hhMhje>ubeh}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hMubh)}(hraw_atomic_long_andnoth]j)}(hraw_atomic_long_andnoth]hraw_atomic_long_andnot}(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}(hj5@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7@modnameN classnameNjwjz)}j}]j)}jsj?sbc.raw_atomic_long_andnotasbuh1hhj.@ubjQ)}(h h]h }(hjU@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.@ubj)}(hjh]h*}(hjc@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.@ubj)}(hj|h]hv}(hjp@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 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:105: ./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 relaxed ordering. Safe to use in noinstr code; prefer atomic_long_andnot() 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:105: ./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:105: ./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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj Aubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj,AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(AhMhj)Aubah}(h]h ]h"]h$]h&]uh1jhj Aubeh}(h]h ]h"]h$]h&]uh1jhj(AhMhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubjM)}(h**Description**h]j)}(hjNAh]h Description}(hjPAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLAubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj@ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjdAhhhNhNubj)}(h**v**h]hv}(hjlAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdAubh to (}(hjdAhhhNhNubj)}(h**v**h]hv}(hj~AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdAubh & }(hjdAhhhNhNubj)}(h**~i**h]h~i}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdAubh) with relaxed ordering.}(hjdAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj@ubjM)}(hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj@ubjM)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj@ubjM)}(hNothing.h]hNothing.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_andnot (C function)c.raw_atomic_long_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(hPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCPmodnameN classnameNjwjz)}j}]j)}jsjOsb"c.raw_atomic_long_fetch_or_acquireasbuh1hhj:PubjQ)}(h h]h }(hjaPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:Pubj)}(hjh]h*}(hjoPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Pubj)}(hj|h]hv}(hj|PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Pubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjOhMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjOhMIubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMIhjOhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMIhjPhhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjOhMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMMhjPubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjPh]hlong i}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMJhjPubj)}(hhh]jM)}(h long valueh]h long value}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMJhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMJhjPubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjQh]hatomic_long_t *v}(hj!QhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMKhjQubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8QhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4QhMKhj5Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj4QhMKhjPubeh}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hjZQh]h Description}(hj\QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXQubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMMhjPubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjpQhhhNhNubj)}(h**v**h]hv}(hjxQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpQubh to (}(hjpQhhhNhNubj)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpQubh | }(hjpQhhhNhNubj)}(h**i**h]hi}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpQubh) with acquire ordering.}(hjpQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMLhjPubjM)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMNhjPubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMPhjPubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMQhjPubeh}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM^ubjQ)}(h h]h }(hj,RhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhj+RhM^ubh)}(h raw_atomic_long_fetch_or_releaseh]j)}(h raw_atomic_long_fetch_or_releaseh]h raw_atomic_long_fetch_or_release}(hj>RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Rubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhj+RhM^ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjZRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVRubjQ)}(h h]h }(hjhRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVRubj)}(hjh]hi}(hjvRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRRubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsj@Rsb"c.raw_atomic_long_fetch_or_releaseasbuh1hhjRubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hj|h]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRRubeh}(h]h ]h"]h$]h&]jjuh1j3hjRhhhj+RhM^ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhj+RhM^ubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+RhM^hjRhhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM^hjRhhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhj+RhM^ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj SjHj SjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMbhjSubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj6Sh]hlong i}(hj8ShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4Subah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM_hj0Subj)}(hhh]jM)}(h long valueh]h long value}(hjOShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKShM_hjLSubah}(h]h ]h"]h$]h&]uh1jhj0Subeh}(h]h ]h"]h$]h&]uh1jhjKShM_hj-Subj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjoSh]hatomic_long_t *v}(hjqShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmSubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM`hjiSubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM`hjSubah}(h]h ]h"]h$]h&]uh1jhjiSubeh}(h]h ]h"]h$]h&]uh1jhjShM`hj-Subeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMbhjSubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically 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 | }(hjShhhNhNubj)}(h**i**h]hi}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh) with release ordering.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMahjSubjM)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMchjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMehjSubjM)}(hThe original value of **v**.h](hThe original value of }(hj,ThhhNhNubj)}(h**v**h]hv}(hj4ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Tubh.}(hj,ThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMfhjSubeh}(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}(hjmThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiThhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hj|ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiThhhj{ThMsubh)}(h raw_atomic_long_fetch_or_relaxedh]j)}(h raw_atomic_long_fetch_or_relaxedh]h raw_atomic_long_fetch_or_relaxed}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1hhjiThhhj{ThMsubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]hi}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubj:)}(hatomic_long_t *vh](h)}(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)}jsjTsb"c.raw_atomic_long_fetch_or_relaxedasbuh1hhjTubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hj|h]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubeh}(h]h ]h"]h$]h&]jjuh1j3hjiThhhj{ThMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjeThhhj{ThMsubah}(h]j`Tah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{ThMshjbThhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjEUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMshjBUhhubah}(h]h ]h"]h$]h&]uh1j3hjbThhhj{ThMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]UjHj]UjIjJjKuh1hhhhjhNhNubj)}(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)}(hjgUh]h Parameters}(hjiUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeUubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwhjaUubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjUh]hlong i}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMthjUubj)}(hhh]jM)}(h long valueh]h long value}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMthjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMthj}Uubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjUh]hatomic_long_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMuhjUubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMuhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMuhj}Uubeh}(h]h ]h"]h$]h&]uh1jhjaUubjM)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwhjaUubjM)}(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}(hj*VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh | }(hjVhhhNhNubj)}(h**i**h]hi}(hj[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjY[hMhj@[hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj#\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj \hhubah}(h]h ]h"]h$]h&]uh1j3hj@[hhhjY[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 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)}(hjE\h]h Parameters}(hjG\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC\ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj?\ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjd\h]hlong i}(hjf\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjb\ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj^\ubj)}(hhh]jM)}(h long valueh]h long value}(hj}\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjy\hMhjz\ubah}(h]h ]h"]h$]h&]uh1jhj^\ubeh}(h]h ]h"]h$]h&]uh1jhjy\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:105: ./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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj?\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:105: ./include/linux/atomic/atomic-long.hhMhj?\ubjM)}(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.}(hj3]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj?\ubjM)}(hThe original value of **v**.h](hThe original value of }(hjZ]hhhNhNubj)}(h**v**h]hv}(hjb]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:105: ./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_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}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_releaseh]j)}(h!raw_atomic_long_fetch_xor_releaseh]h!raw_atomic_long_fetch_xor_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.raw_atomic_long_fetch_xor_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)}(hj|h]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 XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjs^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjp^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_xor_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:105: ./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:105: ./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:105: ./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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj^ubjM)}(hBAtomically 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]hi}(hjj_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:105: ./include/linux/atomic/atomic-long.hhMhj^ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_release() elsewhere.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./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:105: ./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_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:105: ./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}(hj(`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$`ubjQ)}(h h]h }(hj6`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$`ubj)}(hjh]hi}(hjD`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 reftargetja`modnameN classnameNjwjz)}j}]j)}jsj`sb#c.raw_atomic_long_fetch_xor_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)}(hj|h]hv}(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)}(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:105: ./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 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:105: ./include/linux/atomic/atomic-long.hhMhj`ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjah]hlong i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj`ubj)}(hhh]jM)}(h long valueh]h long value}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj=ah]hatomic_long_t *v}(hj?ahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;aubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj7aubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjVahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRahMhjSaubah}(h]h ]h"]h$]h&]uh1jhj7aubeh}(h]h ]h"]h$]h&]uh1jhjRahMhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hjxah]h Description}(hjzahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvaubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj`ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh to (}(hjahhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh ^ }(hjahhhNhNubj)}(h**i**h]hi}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh) with relaxed ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj`ubjM)}(h **Return**h]j)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj`ubjM)}(hThe original value of **v**.h](hThe original value of }(hjahhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hj;bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7bhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjJbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7bhhhjIbhMubh)}(hraw_atomic_long_xchgh]j)}(hraw_atomic_long_xchgh]hraw_atomic_long_xchg}(hj\bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXbubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7bhhhjIbhMubj4)}(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{bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}bmodnameN classnameNjwjz)}j}]j)}jsj^bsbc.raw_atomic_long_xchgasbuh1hhjtbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtbubj)}(hj|h]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpbubj:)}(hlong newh](j)}(hlongh]hlong}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hnewh]hnew}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpbubeh}(h]h ]h"]h$]h&]jjuh1j3hj7bhhhjIbhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3bhhhjIbhMubah}(h]j.bah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIbhMhj0bhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjchhubah}(h]h ]h"]h$]h&]uh1j3hj0bhhhjIbhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,cjHj,cjIjJjKuh1hhhhjhNhNubj)}(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)}(hj6ch]h Parameters}(hj8chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4cubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjUch]hatomic_long_t *v}(hjWchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjScubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjOcubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjchMhjkcubah}(h]h ]h"]h$]h&]uh1jhjOcubeh}(h]h ]h"]h$]h&]uh1jhjjchMhjLcubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjch]hlong new}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjcubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjLcubeh}(h]h ]h"]h$]h&]uh1jhj0cubjM)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjchhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh to }(hjchhhNhNubj)}(h**new**h]hnew}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh with full ordering.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubjM)}(hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubjM)}(h **Return**h]j)}(hj#dh]hReturn}(hj%dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!dubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubjM)}(hThe original value of **v**.h](hThe original value of }(hj9dhhhNhNubj)}(h**v**h]hv}(hjAdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9dubh.}(hj9dhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj0cubeh}(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}(hjzdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvdhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvdhhhjdhMubh)}(hraw_atomic_long_xchg_acquireh]j)}(hraw_atomic_long_xchg_acquireh]hraw_atomic_long_xchg_acquire}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvdhhhjdhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjdsbc.raw_atomic_long_xchg_acquireasbuh1hhjdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hj|h]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubj:)}(hlong newh](j)}(hlongh]hlong}(hj ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj eubj)}(hnewh]hnew}(hj)ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubeh}(h]h ]h"]h$]h&]jjuh1j3hjvdhhhjdhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrdhhhjdhMubah}(h]jmdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhMhjodhhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjSehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjPehhubah}(h]h ]h"]h$]h&]uh1j3hjodhhhjdhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkejHjkejIjJjKuh1hhhhjhNhNubj)}(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)}(hjueh]h Parameters}(hjwehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjseubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjoeubj)}(hhh](j)}(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:105: ./include/linux/atomic/atomic-long.hhMhjeubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjeubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjeh]hlong new}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjeubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjeubeh}(h]h ]h"]h$]h&]uh1jhjoeubjM)}(h**Description**h]j)}(hjfh]h Description}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjoeubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjfhhhNhNubj)}(h**v**h]hv}(hj&fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh to }(hjfhhhNhNubj)}(h**new**h]hnew}(hj8fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh with acquire ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjoeubjM)}(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.}(hjQfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjoeubjM)}(h **Return**h]j)}(hjbfh]hReturn}(hjdfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`fubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjoeubjM)}(hThe original value of **v**.h](hThe original value of }(hjxfhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxfubh.}(hjxfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjoeubeh}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfhhhjfhMubh)}(hraw_atomic_long_xchg_releaseh]j)}(hraw_atomic_long_xchg_releaseh]hraw_atomic_long_xchg_release}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfhhhjfhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjfsbc.raw_atomic_long_xchg_releaseasbuh1hhjfubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hj'ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hj|h]hv}(hj4ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(hlong newh](j)}(hlongh]hlong}(hjLghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHgubjQ)}(h h]h }(hjZghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHgubj)}(hnewh]hnew}(hjhghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(h]h ]h"]h$]h&]jjuh1j3hjfhhhjfhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjfhhhjfhMubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjfhMhjfhhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjfhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjhNhNubj)}(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)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjgubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjgh]hatomic_long_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjgubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj hh]hlong new}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj hubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjhubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj%hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!hhMhj"hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj!hhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjGhh]h Description}(hjIhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEhubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hj]hhhhNhNubj)}(h**v**h]hv}(hjehhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]hubh to }(hj]hhhhNhNubj)}(h**new**h]hnew}(hjwhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]hubh with release ordering.}(hj]hhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjgubjM)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM hjgubjM)}(h **Return**h]j)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM"hjgubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM#hjgubeh}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM0ubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjihM0ubh)}(hraw_atomic_long_xchg_relaxedh]j)}(hraw_atomic_long_xchg_relaxedh]hraw_atomic_long_xchg_relaxed}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjihM0ubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj8ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5iubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:imodnameN classnameNjwjz)}j}]j)}jsjisbc.raw_atomic_long_xchg_relaxedasbuh1hhj1iubjQ)}(h h]h }(hjXihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1iubj)}(hjh]h*}(hjfihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1iubj)}(hj|h]hv}(hjsihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1iubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-iubj:)}(hlong newh](j)}(hlongh]hlong}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hnewh]hnew}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-iubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjihM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjihM0ubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihM0hjhhhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM0hjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjihM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhM4hjiubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjjh]hatomic_long_t *v}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM1hj jubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+jhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'jhM1hj(jubah}(h]h ]h"]h$]h&]uh1jhj jubeh}(h]h ]h"]h$]h&]uh1jhj'jhM1hj jubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjKjh]hlong new}(hjMjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM2hjEjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjdjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`jhM2hjajubah}(h]h ]h"]h$]h&]uh1jhjEjubeh}(h]h ]h"]h$]h&]uh1jhj`jhM2hj jubeh}(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:105: ./include/linux/atomic/atomic-long.hhM4hjiubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh to }(hjjhhhNhNubj)}(h**new**h]hnew}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh with relaxed ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM3hjiubjM)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM5hjiubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM7hjiubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM8hjiubeh}(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}(hj7khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3khhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMEubjQ)}(h h]h }(hjFkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3khhhjEkhMEubh)}(hraw_atomic_long_cmpxchgh]j)}(hraw_atomic_long_cmpxchgh]hraw_atomic_long_cmpxchg}(hjXkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTkubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3khhhjEkhMEubj4)}(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}(hjwkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjykmodnameN classnameNjwjz)}j}]j)}jsjZksbc.raw_atomic_long_cmpxchgasbuh1hhjpkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpkubj)}(hj|h]hv}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlkubj:)}(hlong oldh](j)}(hlongh]hlong}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(holdh]hold}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlkubj:)}(hlong newh](j)}(hlongh]hlong}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjQ)}(h h]h }(hj lhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hnewh]hnew}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlkubeh}(h]h ]h"]h$]h&]jjuh1j3hj3khhhjEkhMEubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/khhhjEkhMEubah}(h]j*kah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEkhMEhj,khhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjElhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMEhjBlhhubah}(h]h ]h"]h$]h&]uh1j3hj,khhhjEkhMEubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]ljHj]ljIjJjKuh1hhhhjhNhNubj)}(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)}(hjglh]h Parameters}(hjilhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjelubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMIhjalubj)}(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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMFhjlubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhMFhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMFhj}lubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjlh]hlong old}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMGhjlubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhMGhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMGhj}lubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjlh]hlong new}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMHhjlubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj mhMHhjmubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj mhMHhj}lubeh}(h]h ]h"]h$]h&]uh1jhjalubjM)}(h**Description**h]j)}(hj3mh]h Description}(hj5mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1mubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMJhjalubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjImhhhNhNubj)}(h**v**h]hv}(hjQmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjImubh == }(hjImhhhNhNubj)}(h**old**h]hold}(hjcmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjImubh), atomically updates }(hjImhhhNhNubj)}(h**v**h]hv}(hjumhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjImubh to }(hjImhhhNhNubj)}(h**new**h]hnew}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjImubh with full ordering. Otherwise, }(hjImhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjImubh2 is not modified and relaxed ordering is provided.}(hjImhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMIhjalubjM)}(hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMLhjalubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMNhjalubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMOhjalubeh}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM\ubjQ)}(h h]h }(hj)nhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnhhhj(nhM\ubh)}(hraw_atomic_long_cmpxchg_acquireh]j)}(hraw_atomic_long_cmpxchg_acquireh]hraw_atomic_long_cmpxchg_acquire}(hj;nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7nubah}(h]h ](jjeh"]h$]h&]jjuh1hhjnhhhj(nhM\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}(hjZnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\nmodnameN classnameNjwjz)}j}]j)}jsj=nsb!c.raw_atomic_long_cmpxchg_acquireasbuh1hhjSnubjQ)}(h h]h }(hjznhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSnubj)}(hj|h]hv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOnubj:)}(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&]noemphjjuh1j9hjOnubj:)}(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&]noemphjjuh1j9hjOnubeh}(h]h ]h"]h$]h&]jjuh1j3hjnhhhj(nhM\ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhj(nhM\ubah}(h]j nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(nhM\hjnhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj(ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM\hj%ohhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhj(nhM\ubeh}(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 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)}(hjJoh]h Parameters}(hjLohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHoubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM`hjDoubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjioh]hatomic_long_t *v}(hjkohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgoubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM]hjcoubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~ohM]hjoubah}(h]h ]h"]h$]h&]uh1jhjcoubeh}(h]h ]h"]h$]h&]uh1jhj~ohM]hj`oubj)}(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:105: ./include/linux/atomic/atomic-long.hhM^hjoubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohM^hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM^hj`oubj)}(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:105: ./include/linux/atomic/atomic-long.hhM_hjoubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohM_hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM_hj`oubeh}(h]h ]h"]h$]h&]uh1jhjDoubjM)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMahjDoubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj,phhhNhNubj)}(h**v**h]hv}(hj4phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubh == }(hj,phhhNhNubj)}(h**old**h]hold}(hjFphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubh), atomically updates }(hj,phhhNhNubj)}(h**v**h]hv}(hjXphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubh to }(hj,phhhNhNubj)}(h**new**h]hnew}(hjjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubh# with acquire ordering. Otherwise, }(hj,phhhNhNubj)}(h**v**h]hv}(hj|phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubh2 is not modified and relaxed ordering is provided.}(hj,phhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM`hjDoubjM)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMchjDoubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMehjDoubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMfhjDoubeh}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hj qhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhj qhMsubh)}(hraw_atomic_long_cmpxchg_releaseh]j)}(hraw_atomic_long_cmpxchg_releaseh]hraw_atomic_long_cmpxchg_release}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhj qhMsubj4)}(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=qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:qubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?qmodnameN classnameNjwjz)}j}]j)}jsj qsb!c.raw_atomic_long_cmpxchg_releaseasbuh1hhj6qubjQ)}(h h]h }(hj]qhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6qubj)}(hjh]h*}(hjkqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6qubj)}(hj|h]hv}(hjxqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2qubj:)}(hlong oldh](j)}(hlongh]hlong}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(holdh]hold}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2qubj:)}(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&]noemphjjuh1j9hj2qubeh}(h]h ]h"]h$]h&]jjuh1j3hjphhhj qhMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhj qhMsubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj qhMshjphhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMshjrhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhj qhMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj#rjHj#rjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj-rh]h Parameters}(hj/rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+rubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwhj'rubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjLrh]hatomic_long_t *v}(hjNrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMthjFrubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjerhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjarhMthjbrubah}(h]h ]h"]h$]h&]uh1jhjFrubeh}(h]h ]h"]h$]h&]uh1jhjarhMthjCrubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjrh]hlong old}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMuhjrubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhMuhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMuhjCrubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjrh]hlong new}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMvhjrubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhMvhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMvhjCrubeh}(h]h ]h"]h$]h&]uh1jhj'rubjM)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMxhj'rubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release 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 == }(hjshhhNhNubj)}(h**old**h]hold}(hj)shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh), atomically updates }(hjshhhNhNubj)}(h**v**h]hv}(hj;shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh to }(hjshhhNhNubj)}(h**new**h]hnew}(hjMshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh# with release ordering. Otherwise, }(hjshhhNhNubj)}(h**v**h]hv}(hj_shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh2 is not modified and relaxed ordering is provided.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMwhj'rubjM)}(hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_release() elsewhere.}(hjxshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMzhj'rubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM|hj'rubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM}hj'rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_long_cmpxchg_relaxed (C function)!c.raw_atomic_long_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hKlong raw_atomic_long_cmpxchg_relaxed (atomic_long_t *v, long old, long new)h]h)}(hJlong raw_atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjshMubh)}(hraw_atomic_long_cmpxchg_relaxedh]j)}(hraw_atomic_long_cmpxchg_relaxedh]hraw_atomic_long_cmpxchg_relaxed}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjshMubj4)}(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 thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"tmodnameN classnameNjwjz)}j}]j)}jsjtsb!c.raw_atomic_long_cmpxchg_relaxedasbuh1hhjtubjQ)}(h h]h }(hj@thhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjNthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj|h]hv}(hj[thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hlong oldh](j)}(hlongh]hlong}(hjsthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjotubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjotubj)}(holdh]hold}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjotubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(hlong newh](j)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hnewh]hnew}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(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)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjthhubah}(h]h ]h"]h$]h&]uh1j3hjshhhjshMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubj)}(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}(hj1uhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-uubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj)uubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDuhMhjEuubah}(h]h ]h"]h$]h&]uh1jhj)uubeh}(h]h ]h"]h$]h&]uh1jhjDuhMhj&uubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjhuh]hlong old}(hjjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfuubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjbuubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}uhMhj~uubah}(h]h ]h"]h$]h&]uh1jhjbuubeh}(h]h ]h"]h$]h&]uh1jhj}uhMhj&uubj)}(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:105: ./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&]uh1jhjuhMhj&uubeh}(h]h ]h"]h$]h&]uh1jhj uubjM)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjuhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh == }(hjuhhhNhNubj)}(h**old**h]hold}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh), atomically updates }(hjuhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh to }(hjuhhhNhNubj)}(h**new**h]hnew}(hj0vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh# with relaxed ordering. Otherwise, }(hjuhhhNhNubj)}(h**v**h]hv}(hjBvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh2 is not modified and relaxed ordering is provided.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubjM)}(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.}(hj[vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubjM)}(h **Return**h]j)}(hjlvh]hReturn}(hjnvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjvubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubjM)}(hThe original value of **v**.h](hThe original value of }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj uubeh}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjvhMubh)}(hraw_atomic_long_try_cmpxchgh]j)}(hraw_atomic_long_try_cmpxchgh]hraw_atomic_long_try_cmpxchg}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjvhMubj4)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjvsbc.raw_atomic_long_try_cmpxchgasbuh1hhjvubjQ)}(h h]h }(hj"whhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hj0whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hj|h]hv}(hj=whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(h long *oldh](j)}(hlongh]hlong}(hjUwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQwubjQ)}(h h]h }(hjcwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQwubj)}(hjh]h*}(hjqwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQwubj)}(holdh]hold}(hj~whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvubj:)}(hlong newh](j)}(hlongh]hlong}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hnewh]hnew}(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.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjwjHjwjIjJjKuh1hhhhjhNhNubj)}(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)}(hjwh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwubj)}(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}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjxubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj7xhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3xhMhj4xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj3xhMhjxubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjWxh]h long *old}(hjYxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUxubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjQxubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjpxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlxhMhjmxubah}(h]h ]h"]h$]h&]uh1jhjQxubeh}(h]h ]h"]h$]h&]uh1jhjlxhMhjxubj)}(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:105: ./include/linux/atomic/atomic-long.hhMhjxubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjwubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjwubjM)}(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 (}(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh == }(hjxhhhNhNubj)}(h**old**h]hold}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh), atomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to }(hjxhhhNhNubj)}(h**new**h]hnew}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh with full ordering. Otherwise, }(hjxhhhNhNubj)}(h**v**h]hv}(hj1yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh is not modified, }(hjxhhhNhNubj)}(h**old**h]hold}(hjCyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh$ is updated to the current value of }(hjxhhhNhNubj)}(h**v**h]hv}(hjUyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh#, and relaxed ordering is provided.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwubjM)}(hHSafe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere.}(hjnyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwubjM)}(h **Return**h]j)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}yubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwubjM)}(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}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh otherwise.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h0raw_atomic_long_try_cmpxchg_acquire (C function)%c.raw_atomic_long_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hPbool raw_atomic_long_try_cmpxchg_acquire (atomic_long_t *v, long *old, long new)h]h)}(hObool raw_atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjyhMubh)}(h#raw_atomic_long_try_cmpxchg_acquireh]j)}(h#raw_atomic_long_try_cmpxchg_acquireh]h#raw_atomic_long_try_cmpxchg_acquire}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjyhMubj4)}(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#zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%zmodnameN classnameNjwjz)}j}]j)}jsjzsb%c.raw_atomic_long_try_cmpxchg_acquireasbuh1hhjzubjQ)}(h h]h }(hjCzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]h*}(hjQzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hj|h]hv}(hj^zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubj:)}(h long *oldh](j)}(hlongh]hlong}(hjvzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrzubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrzubj)}(holdh]hold}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubj:)}(hlong newh](j)}(hlongh]hlong}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hnewh]hnew}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubeh}(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)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{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. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() 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:105: ./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}(hjA{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj={ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj9{ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjX{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjT{hMhjU{ubah}(h]h ]h"]h$]h&]uh1jhj9{ubeh}(h]h ]h"]h$]h&]uh1jhjT{hMhj6{ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hjx{h]h long *old}(hjz{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjv{ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjr{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&]uh1jhjr{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj6{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:105: ./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{hMhj6{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:105: ./include/linux/atomic/atomic-long.hhMhj{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 (}(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 acquire ordering. Otherwise, }(hj|hhhNhNubj)}(h**v**h]hv}(hjR|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh is not modified, }(hj|hhhNhNubj)}(h**old**h]hold}(hjd|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh$ is updated to the current value of }(hj|hhhNhNubj)}(h**v**h]hv}(hjv|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:105: ./include/linux/atomic/atomic-long.hhMhj{ubjM)}(hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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}(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:105: ./include/linux/atomic/atomic-long.hhMhj{ubeh}(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}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhj}hMubh)}(h#raw_atomic_long_try_cmpxchg_releaseh]j)}(h#raw_atomic_long_try_cmpxchg_releaseh]h#raw_atomic_long_try_cmpxchg_release}(hj%}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhj}hMubj4)}(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'}sb%c.raw_atomic_long_try_cmpxchg_releaseasbuh1hhj=}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)}(hj|h]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}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 release orderingh]h1atomic compare and exchange with release ordering}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj~hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhj}hMubeh}(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 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)}(hjA~h]h Parameters}(hjC~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?~ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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}(hjb~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^~ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjZ~ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjy~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhju~hMhjv~ubah}(h]h ]h"]h$]h&]uh1jhjZ~ubeh}(h]h ]h"]h$]h&]uh1jhju~hMhjW~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:105: ./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~hMhjW~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:105: ./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~hMhjW~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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj;~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 (}(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}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh to }(hj#hhhNhNubj)}(h**new**h]hnew}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh# with release ordering. Otherwise, }(hj#hhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj;~ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj;~ubeh}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"hhhj3hMubh)}(h#raw_atomic_long_try_cmpxchg_relaxedh]j)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h#raw_atomic_long_try_cmpxchg_relaxed}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"hhhj3hMubj4)}(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&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsjHsb%c.raw_atomic_long_try_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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(h long *oldh](j)}(hlongh]hlong}(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)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(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&]noemphjjuh1j9hjZubeh}(h]h ]h"]h$]h&]jjuh1j3hj"hhhj3hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj3hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj3hMhjhhubj4)}(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:105: ./include/linux/atomic/atomic-long.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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)}(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:105: ./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&]uh1jhjhMhjxubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjρhMhjxubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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 (}(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 relaxed 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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj\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:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_sub_and_test (C function)c.raw_atomic_long_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(hubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj:ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj_h]hlong i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjYubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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&]uh1jhjhMhjVubeh}(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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hISafe to use in noinstr code; prefer atomic_long_sub_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_sub_and_test() elsewhere.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(h **Return**h]j)}(hj?h]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh if the resulting value of }(hjUhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh is zero, }(hjUhhhNhNubj)}(h **false**h]hfalse}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh otherwise.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_dec_and_test (C function)c.raw_atomic_long_dec_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4bool raw_atomic_long_dec_and_test (atomic_long_t *v)h]h)}(h3bool raw_atomic_long_dec_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjąhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjÅhMubh)}(hraw_atomic_long_dec_and_testh]j)}(hraw_atomic_long_dec_and_testh]hraw_atomic_long_dec_and_test}(hjօhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj؅sbc.raw_atomic_long_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjÅhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(hX,**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](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:105: ./include/linux/atomic/atomic-long.hhMhjuubj)}(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:105: ./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&]uh1jhjuubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(hISafe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(h **Return**h]j)}(hj/h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjuubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh if the resulting value of }(hjEhhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh is zero, }(hjEhhhNhNubj)}(h **false**h]hfalse}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh otherwise.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_and_test (C function)c.raw_atomic_long_inc_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4bool raw_atomic_long_inc_and_test (atomic_long_t *v)h]h)}(h3bool raw_atomic_long_inc_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM*ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM*ubh)}(hraw_atomic_long_inc_and_testh]j)}(hraw_atomic_long_inc_and_testh]hraw_atomic_long_inc_and_test}(hjƇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj‡ubah}(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)}jsjȇsbc.raw_atomic_long_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)}(hj|h]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 increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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 full ordering. Safe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](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:105: ./include/linux/atomic/atomic-long.hhM.hjeubj)}(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:105: ./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)}(hjňh]h Description}(hjLjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÈubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM-hjeubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM,hjeubjM)}(hISafe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM.hjeubjM)}(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:105: ./include/linux/atomic/atomic-long.hhM0hjeubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh if the resulting value of }(hj5hhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh is zero, }(hj5hhhNhNubj)}(h **false**h]hfalse}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh otherwise.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM1hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_add_negative (C function)c.raw_atomic_long_add_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(hubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM>ubh)}(hraw_atomic_long_add_negativeh]j)}(hraw_atomic_long_add_negativeh]hraw_atomic_long_add_negative}(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}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_add_negativeasbuh1hhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjDhhhNhNubah}(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)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM>hjjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMBhjubj)}(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:105: ./include/linux/atomic/atomic-long.hhM?hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjNJhhhNhNubah}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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@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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMBhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj8hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh to (}(hj8hhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh + }(hj8hhhNhNubj)}(h**i**h]hi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh) with full ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMAhjubjM)}(hISafe to use in noinstr code; prefer atomic_long_add_negative() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_add_negative() elsewhere.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMChjubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMEhjubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_add_negative_acquire (C function)&c.raw_atomic_long_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_long_add_negative_acquire (long i, atomic_long_t *v)h]h)}(hCbool raw_atomic_long_add_negative_acquire(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMSubh)}(h$raw_atomic_long_add_negative_acquireh]j)}(h$raw_atomic_long_add_negative_acquireh]h$raw_atomic_long_add_negative_acquire}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMSubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=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&]noemphjjuh1j9hj9ubj:)}(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'sb&c.raw_atomic_long_add_negative_acquireasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(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)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMShjٌhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMSubeh}(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_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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMWhjubj)}(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:105: ./include/linux/atomic/atomic-long.hhMThjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMThj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMThjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjVh]hatomic_long_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMUhjPubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMUhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMUhjubeh}(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:105: ./include/linux/atomic/atomic-long.hhMWhjubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMVhjubjM)}(hQSafe to use in noinstr code; prefer atomic_long_add_negative_acquire() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_add_negative_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMXhjubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMZhjubjM)}(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}(hj)hhhNhNubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_add_negative_release (C function)&c.raw_atomic_long_add_negative_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_long_add_negative_release (long i, atomic_long_t *v)h]h)}(hCbool raw_atomic_long_add_negative_release(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjhMhubh)}(h$raw_atomic_long_add_negative_releaseh]j)}(h$raw_atomic_long_add_negative_releaseh]h$raw_atomic_long_add_negative_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjhMhubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb&c.raw_atomic_long_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjphhhjhMhubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlhhhjhMhubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhhjihhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjhMhubeh}(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_add_negative_release() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.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:105: ./include/linux/atomic/atomic-long.hhMlhjgubj)}(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:105: ./include/linux/atomic/atomic-long.hhMihjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(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:105: ./include/linux/atomic/atomic-long.hhMjhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjޏhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjڏhMjhjۏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڏhMjhjubeh}(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:105: ./include/linux/atomic/atomic-long.hhMlhjgubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMkhjgubjM)}(hQSafe to use in noinstr code; prefer atomic_long_add_negative_release() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_add_negative_release() elsewhere.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMmhjgubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMohjgubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMphjgubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߐhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjߐhhhjhM}ubh)}(h$raw_atomic_long_add_negative_relaxedh]j)}(h$raw_atomic_long_add_negative_relaxedh]h$raw_atomic_long_add_negative_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjߐhhhjhM}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 }(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsjsb&c.raw_atomic_long_add_negative_relaxedasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(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)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhM}hjhhubah}(h]h ]h"]h$]h&]uh1j3hjؐhhhjhM}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. 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)}(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:105: ./include/linux/atomic/atomic-long.hhMhj֑ubj)}(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:105: ./include/linux/atomic/atomic-long.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)}(hj4h]hatomic_long_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj.ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj֑ubjM)}(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.}(hjʒhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhj`hMubh)}(h raw_atomic_long_fetch_add_unlessh]j)}(h raw_atomic_long_fetch_add_unlessh]h raw_atomic_long_fetch_add_unless}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1hhjNhhhj`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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjusb"c.raw_atomic_long_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hj͓hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong ah](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong uh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjlh]hu}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjNhhhj`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJhhhj`hMubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMhjGhhubj4)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1j3hjGhhhj`hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvjHjvjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]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:105: ./include/linux/atomic/atomic-long.hhMhjzubj)}(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:105: ./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&]uh1jhjhMhjubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjҔubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҔubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjh]hlong u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]jM)}(hlong value to compare withh]hlong 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&hMhjubeh}(h]h ]h"]h$]h&]uh1jhjzubjM)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjzubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjbhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh != }(hjbhhhNhNubj)}(h**u**h]hu}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh), atomically updates }(hjbhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh to (}(hjbhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh + }(hjbhhhNhNubj)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh!) with full ordering. Otherwise, }(hjbhhhNhNubj)}(h**v**h]hv}(hjĕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh2 is not modified and relaxed ordering is provided.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjzubjM)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere.}(hjݕhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjzubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjzubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjzubeh}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjRhMubh)}(hraw_atomic_long_add_unlessh]j)}(hraw_atomic_long_add_unlessh]hraw_atomic_long_add_unless}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjRhMubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjgsbc.raw_atomic_long_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)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(hlong ah](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]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӖubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(hlong uh](j)}(hlongh]hlong}(hj hhhNhNubah}(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&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjRhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhjRhMubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhMhj:hhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hj:hhhjRhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjlubj)}(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:105: ./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&]uh1jhjhMhjubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjėubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjߗhMhjubah}(h]h ]h"]h$]h&]uh1jhjėubeh}(h]h ]h"]h$]h&]uh1jhjߗhMhjubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjh]hlong u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjlubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjThhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh != }(hjThhhNhNubj)}(h**u**h]hu}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh), atomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh + }(hjThhhNhNubj)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh!) with full ordering. Otherwise, }(hjThhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(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:105: ./include/linux/atomic/atomic-long.hhMhjlubjM)}(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.}(hjϘhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjlubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޘubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjlubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjlubeh}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjdhMubh)}(hraw_atomic_long_inc_not_zeroh]j)}(hraw_atomic_long_inc_not_zeroh]hraw_atomic_long_inc_not_zero}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjdhMubj4)}(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)}jsjysbc.raw_atomic_long_inc_not_zeroasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjęhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjљhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjShhhjdhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjdhMubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhMhjLhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjdhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./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&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj5ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh was updated, }(hj hhhNhNubj)}(h **false**h]hfalse}(hj2hhhNhNubah}(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:105: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h0raw_atomic_long_inc_unless_negative (C function)%c.raw_atomic_long_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h;bool raw_atomic_long_inc_unless_negative (atomic_long_t *v)h]h)}(h:bool raw_atomic_long_inc_unless_negative(atomic_long_t *v)h](j)}(hjh]hbool}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjxhMubh)}(h#raw_atomic_long_inc_unless_negativeh]j)}(h#raw_atomic_long_inc_unless_negativeh]h#raw_atomic_long_inc_unless_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjxhMubj4)}(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_unless_negativeasbuh1hhjubjQ)}(h h]h }(hjʛhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj؛hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjghhhjxhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjxhMubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxhMhj`hhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj`hhhjxhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhjhNhNubj)}(hXt**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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)}(hjOh]hatomic_long_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjIubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubah}(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:105: ./include/linux/atomic/atomic-long.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 (}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj*ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj*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:105: ./include/linux/atomic/atomic-long.hhMhj*ubjM)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj*ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhMubh)}(h#raw_atomic_long_dec_unless_positiveh]j)}(h#raw_atomic_long_dec_unless_positiveh]h#raw_atomic_long_dec_unless_positive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhjhMubj4)}(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_unless_positiveasbuh1hhjubjQ)}(h h]h }(hjޝhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj|h]hv}(hjhhhNhNubah}(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'hjwhhhjhMubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjthhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(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)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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)}(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:105: ./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&]uh1jLhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubah}(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:105: ./include/linux/atomic/atomic-long.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 (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh <= 0), atomically 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 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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj>ubjM)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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:105: ./include/linux/atomic/atomic-long.hhMhj>ubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh if }(hj2hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh was updated, }(hj2hhhNhNubj)}(h **false**h]hfalse}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh otherwise.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_dec_if_positiveh]j)}(hraw_atomic_long_dec_if_positiveh]hraw_atomic_long_dec_if_positive}(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.raw_atomic_long_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)}(hj|h]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 if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(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:105: ./include/linux/atomic/atomic-long.hhMhjSubj)}(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}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjrubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubah}(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:105: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(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}(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. 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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(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:105: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjGhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh - 1), regardless of whether }(hjGhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh was updated.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:105: ./include/linux/atomic/atomic-long.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]atomicsah ]h"]atomicsah$]h&]uh1hhhhhhhhKaubh)}(hhh](h)}(hKernel objects manipulationh]hKernel objects manipulation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKmubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_get_path (C function)c.kobject_get_pathhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDchar * kobject_get_path (const struct kobject *kobj, gfp_t gfp_mask)h]h)}(hBchar *kobject_get_path(const struct kobject *kobj, gfp_t gfp_mask)h](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKubjQ)}(h h]h }(hj¡hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubj)}(hjh]h*}(hjСhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hkobject_get_pathh]j)}(hkobject_get_pathh]hkobject_get_path}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݡubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h,(const struct kobject *kobj, gfp_t gfp_mask)h](j:)}(hconst struct kobject *kobjh](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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_get_pathasbuh1hhjubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hgfp_t gfp_maskh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jRc.kobject_get_pathasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfp_maskh]hgfp_mask}(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)}(h2Allocate memory and fill in the path for **kobj**.h](h)Allocate memory and fill in the path for }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./lib/kobject.chKhjubj)}(hhh](j)}(hQ``const struct kobject *kobj`` kobject in question, with which to build the path h](j)}(h``const struct kobject *kobj``h]jS)}(hj6h]hconst struct kobject *kobj}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhj0ubj)}(hhh]jM)}(h1kobject in question, with which to build the pathh]h1kobject in question, with which to build the path}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhKhj-ubj)}(hA``gfp_t gfp_mask`` the allocation type used to allocate the path h](j)}(h``gfp_t gfp_mask``h]jS)}(hjoh]hgfp_t gfp_mask}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhjiubj)}(hhh]jM)}(h-the allocation type used to allocate the pathh]h-the allocation type used to allocate the path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(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:111: ./lib/kobject.chKhjubjM)}(h:The newly allocated memory, caller must free with kfree().h]h:The newly allocated memory, caller must free with kfree().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_set_name (C function)c.kobject_set_namehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAint kobject_set_name (struct kobject *kobj, const char *fmt, ...)h]h)}(h@int kobject_set_name(struct kobject *kobj, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM,ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM,ubh)}(hkobject_set_nameh]j)}(hkobject_set_nameh]hkobject_set_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM,ubj4)}(h,(struct kobject *kobj, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]j)}(hkobjecth]hkobject}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_set_nameasbuh1hhj(ubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$ubj:)}(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*}(hjդhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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&]jjuh1j3hjhhhjhM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM,ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM,hjhhubj4)}(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:111: ./lib/kobject.chM,hj!hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./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)}(hjeh]hstruct kobject *kobj}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM-hj_ubj)}(hhh]jM)}(h!struct kobject to set the name ofh]h!struct kobject to set the name of}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhM-hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM-hj\ubj)}(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:111: ./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.hj\ubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjץh]h...}(hj٥hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjեubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./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&]uh1jhjhKhj\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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM/hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_init (C function)c.kobject_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(hGvoid kobject_init (struct kobject *kobj, const struct kobj_type *ktype)h]h)}(hFvoid kobject_init(struct kobject *kobj, const struct kobj_type *ktype)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMBubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehMBubh)}(h kobject_inith]j)}(h kobject_inith]h kobject_init}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjehMBubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjzsbc.kobject_initasbuh1hhjubjQ)}(h h]h }(hjҦhhhNhNubah}(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 struct kobj_type *ktypeh](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)}(h kobj_typeh]h kobj_type}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]jΦc.kobject_initasbuh1hhjubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hktypeh]hktype}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjehMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjehMBubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehMBhjLhhubj4)}(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:111: ./lib/kobject.chMBhjhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjehMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./lib/kobject.chMFhjubj)}(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:111: ./lib/kobject.chMChjݧubj)}(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&]uh1jhjݧubeh}(h]h ]h"]h$]h&]uh1jhjhMChjڧubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]jS)}(hjh]hconst struct kobj_type *ktype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMDhjubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMDhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMDhjڧubeh}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMFhjubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMEhjubjM)}(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.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_add (C function) c.kobject_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(hTint kobject_add (struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h]h)}(hSint kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMzubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMzubh)}(h kobject_addh]j)}(h kobject_addh]h kobject_add}(hj̨hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȨubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMzubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjΨsb c.kobject_addasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjZhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjVubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubh)}(hhh]j)}(hkobjecth]hkobject}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j" c.kobject_addasbuh1hhjVubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƩubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƩubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƩubj)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƩubeh}(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&]jjuh1j3hjhhhjhMzubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMzubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMzhjhhubj4)}(hhh]jM)}(hThe main kobject add function.h]hThe main kobject add function.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMzhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMzubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM~hjlubj)}(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:111: ./lib/kobject.chM{hjubj)}(hhh]jM)}(hthe kobject to addh]hthe kobject to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(hA``struct kobject *parent`` pointer to the parent of the kobject. h](j)}(h``struct kobject *parent``h]jS)}(hjʪh]hstruct kobject *parent}(hj̪hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjȪubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM|hjĪubj)}(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&]uh1jLhjߪhM|hjubah}(h]h ]h"]h$]h&]uh1jhjĪubeh}(h]h ]h"]h$]h&]uh1jhjߪhM|hjubj)}(h5``const char *fmt`` format to name the kobject with. h](j)}(h``const char *fmt``h]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:111: ./lib/kobject.chM}hjubj)}(hhh]jM)}(h format to name the kobject with.h]h format to name the kobject with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hj<h]h...}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhj6ubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhjubeh}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhjlubjM)}(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:111: ./lib/kobject.chM~hjlubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be set to it. If }(hjhhhNhNubj)}(h **parent**h]hparent}(hjȫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! is NULL, then the parent of the }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hjګhhhNhNubah}(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:111: ./lib/kobject.chMhjlubjM)}(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:111: ./lib/kobject.chMhjlubji)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubeh}(h]h ]h"]h$]h&]uh1jhhjhMhjlubjM)}(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:111: ./lib/kobject.chMhjlubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kobject_init_and_add (C function)c.kobject_init_and_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h|int kobject_init_and_add (struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h]h)}(h{int kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjhMubh)}(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&]jjuh1hhjmhhhjhMubj4)}(hc(struct kobject *kobj, const struct kobj_type *ktype, 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&]uh1jhjɬubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjάmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_init_and_addasbuh1hhjubjQ)}(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 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 }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kobj_typeh]h kobj_type}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]jc.kobject_init_and_addasbuh1hhjubjQ)}(h h]h }(hjwhhhNhNubah}(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&]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}(hjɭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƭubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj˭modnameN classnameNjwjz)}j}]jc.kobject_init_and_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *fmth](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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjRhhhNhNubah}(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...}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(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)}(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:111: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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}(hjŮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubj)}(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:111: ./lib/kobject.chMhjܮubj)}(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&]uh1jhjܮubeh}(h]h ]h"]h$]h&]uh1jhjhMhjٮubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]jS)}(hjh]hconst struct kobj_type *ktype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjٮubj)}(hB``struct kobject *parent`` pointer to the parent of this kobject. h](j)}(h``struct kobject *parent``h]jS)}(hjTh]hstruct kobject *parent}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjNubj)}(hhh]jM)}(h&pointer to the parent of this kobject.h]h&pointer to the parent of this kobject.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjٮubj)}(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:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(hthe name of the kobject.h]hthe name of the kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjٮubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjƯh]h...}(hjȯhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjįubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.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ۯhKhjٮ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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chKhjubjM)}(hDThis function combines the call to kobject_init() and kobject_add().h]hDThis function combines the call to kobject_init() and kobject_add().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubjM)}(hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.h]hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_rename (C function)c.kobject_renamehNtauh1hhjhhhNhNubh)}(hhh](h)}(h?int kobject_rename (struct kobject *kobj, const char *new_name)h]h)}(h>int kobject_rename(struct kobject *kobj, const char *new_name)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjchMubh)}(hkobject_renameh]j)}(hkobject_renameh]hkobject_rename}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjchMubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjxsbc.kobject_renameasbuh1hhjubjQ)}(h h]h }(hjаhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjްhhhNhNubah}(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}(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)}(hnew_nameh]hnew_name}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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)}(hChange the name of an object.h]hChange the name of an object.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjohhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjchMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:111: ./lib/kobject.chMhjubj)}(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:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject in question.h]hobject in question.}(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 *new_name`` object's new name h](j)}(h``const char *new_name``h]jS)}(hjh]hconst char *new_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject's new nameh]hobject’s new name}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_move (C function)c.kobject_movehNtauh1hhjhhhNhNubh)}(hhh](h)}(hCint kobject_move (struct kobject *kobj, struct kobject *new_parent)h]h)}(hBint kobject_move(struct kobject *kobj, struct kobject *new_parent)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjzhMubh)}(h kobject_moveh]j)}(h kobject_moveh]h kobject_move}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjzhMubj4)}(h2(struct kobject *kobj, struct kobject *new_parent)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}(hjDzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjɲmodnameN 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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]jc.kobject_moveasbuh1hhjubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h new_parenth]h new_parent}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)}(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:111: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./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:111: ./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@``struct kobject *new_parent`` object's new parent (can be NULL)h](j)}(h``struct kobject *new_parent``h]jS)}(hjh]hstruct kobject *new_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(h!object's new parent (can be NULL)h]h#object’s new parent (can be NULL)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_del (C function) c.kobject_delhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void kobject_del (struct kobject *kobj)h]h)}(h&void kobject_del(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlhhhj~hMeubh)}(h kobject_delh]j)}(h kobject_delh]h kobject_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhj~hMeubj4)}(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}(hj˴hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȴubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjʹmodnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_delasbuh1hhjubjQ)}(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&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjlhhhj~hMeubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhj~hMeubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMehjehhubj4)}(hhh]jM)}(hUnlink kobject from hierarchy.h]hUnlink kobject from hierarchy.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMehj-hhubah}(h]h ]h"]h$]h&]uh1j3hjehhhj~hMeubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(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)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMihjLubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]jS)}(hjqh]hstruct kobject *kobj}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMfhjkubj)}(hhh]jM)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjhubah}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhhjLubjM)}(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:111: ./lib/kobject.chMghjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_get (C function) c.kobject_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h3struct kobject * kobject_get (struct kobject *kobj)h]h)}(h1struct kobject *kobject_get(struct kobject *kobj)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMyubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}js kobject_getsb c.kobject_getasbuh1hhjhhhjhMyubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMyubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMyubh)}(h kobject_geth]j)}(hj.h]h kobject_get}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMyubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjkhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjgubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j, c.kobject_getasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hkobjh]hkobj}(hj¶hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMyubeh}(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:111: ./lib/kobject.chMyhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h2**Parameters** ``struct kobject *kobj`` object.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:111: ./lib/kobject.chM}hjubj)}(hhh]j)}(h ``struct kobject *kobj`` object.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:111: ./lib/kobject.chMhj'ubj)}(hhh]jM)}(hobject.h]hobject.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMzhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_put (C function) c.kobject_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void kobject_put (struct kobject *kobj)h]h)}(h&void kobject_put(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kobject_puth]j)}(h kobject_puth]h kobject_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kobject *kobj)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&]uh1jhj߷ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_putasbuh1hhjubjQ)}(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&]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)}(hDecrement refcount for object.h]hDecrement refcount for object.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhjhNhNubj)}(h~**Parameters** ``struct kobject *kobj`` object. **Description** Decrement the refcount, and if 0, call kobject_cleanup().h](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjcubj)}(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:111: ./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&]uh1jhjcubjM)}(h**Description**h]j)}(hjøh]h Description}(hjŸhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjcubjM)}(h9Decrement the refcount, and if 0, call kobject_cleanup().h]h9Decrement the refcount, and if 0, call kobject_cleanup().}(hjٸhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kobject_create_and_add (C function)c.kobject_create_and_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(hRstruct kobject * kobject_create_and_add (const char *name, struct kobject *parent)h]h)}(hPstruct kobject *kobject_create_and_add(const char *name, struct kobject *parent)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hhh]j)}(hkobjecth]hkobject}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jskobject_create_and_addsbc.kobject_create_and_addasbuh1hhjhhhjhM ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hkobject_create_and_addh]j)}(hjEh]hkobject_create_and_add}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h*(const char *name, struct kobject *parent)h](j:)}(hconst char *nameh](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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hnameh]hname}(hjƹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubj:)}(hstruct kobject *parenth](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)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jCc.kobject_create_and_addasbuh1hhj۹ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj۹ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۹ubj)}(hparenth]hparent}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۹ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubeh}(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?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:111: ./lib/kobject.chM hj]hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(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:111: ./lib/kobject.chM hj|ubj)}(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:111: ./lib/kobject.chM hjubj)}(hhh]jM)}(hthe name for the kobjecth]hthe name for the kobject}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hG``struct kobject *parent`` the parent kobject of this kobject, if any. h](j)}(h``struct kobject *parent``h]jS)}(hjںh]hstruct kobject *parent}(hjܺhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjغubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM hjԺubj)}(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&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjԺubeh}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhj|ubjM)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM hj|ubjM)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_register (C function)c.kset_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int kset_register (struct kset *k)h]h)}(h!int kset_register(struct kset *k)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMWubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjwhMWubh)}(h kset_registerh]j)}(h kset_registerh]h kset_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjwhMWubj4)}(h(struct kset *k)h]j:)}(hstruct kset *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)}(hkseth]hkset}(hjĻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjƻmodnameN 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&]jjuh1j3hjehhhjwhMWubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjwhMWubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMWhj^hhubj4)}(hhh]jM)}(hInitialize and add a kset.h]hInitialize and add a kset.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMWhj%hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhjwhMWubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chM[hjDubj)}(hhh]j)}(h``struct kset *k`` kset. h](j)}(h``struct kset *k``h]jS)}(hjih]hstruct kset *k}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMXhjcubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMXhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMXhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMZhjDubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMZhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_unregister (C function)c.kset_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void kset_unregister (struct kset *k)h]h)}(h$void kset_unregister(struct kset *k)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMwubh)}(hkset_unregisterh]j)}(hkset_unregisterh]hkset_unregister}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMwubj4)}(h(struct kset *k)h]j:)}(hstruct kset *kh](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)}(hkseth]hkset}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsj sbc.kset_unregisterasbuh1hhj"ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMwubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMwubah}(h]jܼah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMwhj޼hhubj4)}(hhh]jM)}(hRemove a kset.h]hRemove a kset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMwhjhhubah}(h]h ]h"]h$]h&]uh1j3hj޼hhhjhMwubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h***Parameters** ``struct kset *k`` kset.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:111: ./lib/kobject.chM{hjĽ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:111: ./lib/kobject.chM}hjubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjĽubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkset_find_obj (C function)c.kset_find_objhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDstruct kobject * kset_find_obj (struct kset *kset, const char *name)h]h)}(hBstruct kobject *kset_find_obj(struct kset *kset, const char *name)h](j?)}(hjBh]hstruct}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhjPhMubh)}(hhh]j)}(hkobjecth]hkobject}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}js kset_find_objsbc.kset_find_objasbuh1hhj?hhhjPhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhjPhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubh)}(h kset_find_objh]j)}(hjh]h kset_find_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhjPhMubj4)}(h%(struct kset *kset, const char *name)h](j:)}(hstruct kset *kseth](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)}(hkseth]hkset}(hj۾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؾubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjݾmodnameN classnameNjwjz)}j}]j~c.kset_find_objasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hnameh]hname}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj?hhhjPhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhjPhMubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMhj8hhubj4)}(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:111: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhjPhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./lib/kobject.chMhjubj)}(hhh](j)}(h-``struct kset *kset`` kset we're looking in. h](j)}(h``struct kset *kset``h]jS)}(hjܿh]hstruct kset *kset}(hj޿hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjڿubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjֿubj)}(hhh]jM)}(hkset we're looking in.h]hkset we’re looking in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjֿubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӿubj)}(h$``const char *name`` object's name. 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:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject's name.h]hobject’s name.}(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&]uh1jhjubjM)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubjM)}(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 }(hjfhhhNhNubj)}(h**kset->subsys**h]h kset->subsys}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh, and iterate over }(hjfhhhNhNubj)}(h**kset->list**h]h kset->list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubhe, looking for a matching kobject. If matching object is found take a reference and return the object.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kset_create_and_add (C function)c.kset_create_and_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h{struct kset * kset_create_and_add (const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h]h)}(hystruct kset *kset_create_and_add(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(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_addasbuh1hhjhhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkset_create_and_addh]j)}(hjh]hkset_create_and_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hY(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j:)}(hconst char *nameh](j?)}(hj h]hconst}(hj3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj/ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hcharh]hchar}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hnameh]hname}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1j9hj+ubj:)}(hstruct kobject *parent_kobjh](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)}(hkobjecth]hkobject}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]jc.kset_create_and_addasbuh1hhjubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h parent_kobjh]h parent_kobj}(hjrhhhNhNubah}(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)}(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:111: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:111: ./lib/kobject.chMhjubj)}(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:111: ./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)}(hjh]h(const struct kset_uevent_ops *uevent_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubj)}(hhh]jM)}(h%a struct kset_uevent_ops for the kseth]h%a struct kset_uevent_ops for the kset}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjubj)}(hI``struct kobject *parent_kobj`` the parent kobject of this kset, if any. h](j)}(h``struct kobject *parent_kobj``h]jS)}(hjOh]hstruct kobject *parent_kobj}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjIubj)}(hhh]jM)}(h(the parent kobject of this kset, if any.h]h(the parent kobject of this kset, if any.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjubeh}(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:111: ./lib/kobject.chMhjubjM)}(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:111: ./lib/kobject.chMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_uevent_env (C function)c.kobject_uevent_envhNtauh1hhjhhhNhNubh)}(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:114: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_uevent_envasbuh1hhjubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jUc.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&]noemphjjuh1j9hjubj:)}(hchar *envp_ext[]h](j)}(hcharh]hchar}(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)}(henvp_exth]henvp_ext}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]h[}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjyh]h]}(hj4hhhNhNubah}(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&send an uevent with environmental datah]h&send an uevent with environmental data}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjyubj)}(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:114: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:114: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(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)}(hjh]hchar *envp_ext[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhj ubj)}(hhh]jM)}(hpointer to environmental datah]hpointer to environmental data}(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&]uh1jhjyubjM)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjyubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkobject_uevent (C function)c.kobject_ueventhNtauh1hhjhhhNhNubh)}(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:114: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_ueventh]j)}(hkobject_ueventh]hkobject_uevent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_ueventasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(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:)}(henum kobject_action actionh](j?)}(hjh]henum}(hj?hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj;ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubh)}(hhh]j)}(hkobject_actionh]hkobject_action}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]jc.kobject_ueventasbuLh1hhj;ubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hactionh]haction}(hjhhhNhNubah}(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%notify userspace by sending an ueventh]h%notify userspace by sending an uevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:114: ./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:114: ./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)}(hj-h]henum kobject_action action}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhj'ubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./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.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_uevent_var (C function)c.add_uevent_varhNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hadd_uevent_varh]j)}(hadd_uevent_varh]hadd_uevent_var}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.add_uevent_varasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henvh]henv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *formath](j?)}(hj h]hconst}(hj\hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjXubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hcharh]hchar}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hformath]hformat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(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:114: ./lib/kobject_uevent.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:114: ./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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(henvironment buffer structureh]henvironment buffer structure}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubj)}(h<``const char *format`` printf format for the key=value pair h](j)}(h``const char *format``h]jS)}(hj\h]hconst char *format}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./lib/kobject_uevent.chMhjVubj)}(hhh]jM)}(h$printf format for the key=value pairh]h$printf format for the key=value pair}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjubj)}(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:114: ./lib/kobject_uevent.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&]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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:114: ./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:114: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]kernel-objects-manipulationah ]h"]kernel objects manipulationah$]h&]uh1hhhhhhhhKmubh)}(hhh](h)}(hKernel utility functionsh]hKernel utility functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKvubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hARRAY_SIZE (C macro) c.ARRAY_SIZEhNtauh1hhjhhhNhNubh)}(hhh](h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]j)}(hj(h]h ARRAY_SIZE}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&hhhjEhKubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhKhj#hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj#hhhjEhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj^jHj^jIjJjKuh1hhhhjhNhNubjM)}(h``ARRAY_SIZE (arr)``h]jS)}(hjdh]hARRAY_SIZE (arr)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/array_size.hhK hjhhubji)}(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 }(hj~hhhNhNubj)}(h**arr**h]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/array_size.hhKhjzubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(h+**Parameters** ``arr`` array to be sizedh](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:120: ./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:120: ./include/linux/array_size.hhKhjubj)}(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:120: ./include/linux/array_size.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hARRAY_END (C macro) c.ARRAY_ENDhNtauh1hhjhhhNhNubh)}(hhh](h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]j)}(hjh]h ARRAY_END}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj7hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhj7hKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubjM)}(h``ARRAY_END (arr)``h]jS)}(hjVh]hARRAY_END (arr)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/array_size.hhKhjhhubji)}(hubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/stddef.hhKhj'ubjM)}(hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h]hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/stddef.hhKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfor_each_if (C macro) c.for_each_ifhNtauh1hhjhhhNhNubh)}(hhh](h)}(h for_each_ifh]h)}(h for_each_ifh]h)}(h for_each_ifh]j)}(hjh]h for_each_if}(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/util_macros.hhK ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhK ubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK hjzhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjzhhhjhK ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h``for_each_if (condition)``h]jS)}(hjh]hfor_each_if (condition)}(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/util_macros.hhK hjhhubji)}(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)}(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/util_macros.hhKhjubj)}(hhh]j)}(h%``condition`` The condition to check h](j)}(h ``condition``h]jS)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhK hj ubj)}(hhh]jM)}(hThe condition to checkh]hThe condition to check}(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**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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:133: ./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)}hjosbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfind_closest (C macro)c.find_closesthNtauh1hhjhhhNhNubh)}(hhh](h)}(h find_closesth]h)}(h find_closesth]h)}(h find_closesth]j)}(hjh]h find_closest}(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/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&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:133: ./include/linux/util_macros.hhKhjhhubji)}(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:133: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj hKhjhhubj)}(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)}(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/util_macros.hhKhjubj)}(hhh](j)}(h``x`` The reference value. h](j)}(h``x``h]jS)}(hj7h]hx}(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/util_macros.hhKhj1ubj)}(hhh]jM)}(hThe reference value.h]hThe reference value.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhKhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhKhj.ubj)}(h]``a`` The array in which to look for the closest element. Must be sorted in ascending order. h](j)}(h``a``h]jS)}(hjph]ha}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjjubj)}(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:133: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj.ubj)}(h``as`` Size of 'a'. h](j)}(h``as``h]jS)}(hjh]has}(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/util_macros.hhKhjubj)}(hhh]jM)}(h Size of 'a'.h]hSize of ‘a’.}(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&]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:133: ./include/linux/util_macros.hhK hjubjM)}(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:133: ./include/linux/util_macros.hhKhjubjM)}(h**Note**h]j)}(hj h]hNote}(hjhhhNhNubah}(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/util_macros.hhK!hjubj)}(hhh]j)}(hIf using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](j)}(hBIf using an array of negative numbers (or mixed positive numbers),h]hBIf using an array of negative numbers (or mixed positive numbers),}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhK!hj%ubj)}(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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhK"hj8ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj7hK!hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!find_closest_descending (C macro)c.find_closest_descendinghNtauh1hhjhhhNhNubh)}(hhh](h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]j)}(hjvh]hfind_closest_descending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjxhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhK8ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjhK8ubah}(h]joah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK8hjqhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjqhhhjhK8ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h&``find_closest_descending (x, a, as)``h]jS)}(hjh]h"find_closest_descending (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:133: ./include/linux/util_macros.hhK:hjhhubji)}(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:133: ./include/linux/util_macros.hhK8hjubah}(h]h ]h"]h$]h&]uh1jhhjhK8hjhhubj)}(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:133: ./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:133: ./include/linux/util_macros.hhK=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hPTR_IF (C macro)c.PTR_IFhNtauh1hhjhhhNhNubh)}(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:133: ./include/linux/util_macros.hhKVubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKVhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKVubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubjM)}(h``PTR_IF (cond, ptr)``h]jS)}(hj/h]hPTR_IF (cond, ptr)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKXhjhhubji)}(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 }(hjIhhhNhNubj)}(h**ptr**h]hptr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh if }(hjIhhhNhNubj)}(h**cond**h]hcond}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh is true, or to NULL otherwise.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKVhjEubah}(h]h ]h"]h$]h&]uh1jhhj{hKVhjhhubj)}(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:133: ./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)}(hjh]hcond}(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/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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhjubj)}(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:133: ./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)}(hj-h]h Description}(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/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 }(hjChhhNhNubj)}(h**ptr**h]hptr}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubhG if CONFIG_FOO is set to ‘y’ or ‘m’, or to NULL otherwise. The }(hjChhhNhNubj)}(h**ptr**h]hptr}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh argument must be a pointer.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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:133: ./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:133: ./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:133: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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:133: ./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:133: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hu64_to_user_ptr (C macro)c.u64_to_user_ptrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]j)}(hjh]hu64_to_user_ptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.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&]jFjAjGj>jHj>jIjJjKuh1hhhhjhNhNubjM)}(h``u64_to_user_ptr (x)``h]jS)}(hjDh]hu64_to_user_ptr (x)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjhhubji)}(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 *}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjZubah}(h]h ]h"]h$]h&]uh1jhhjlhKhjhhubj)}(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)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjsubj)}(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:133: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(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&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjsubjM)}(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:133: ./include/linux/util_macros.hhKhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_insidevar (C macro)c.is_insidevarhNtauh1hhjhhhNhNubh)}(hhh](h)}(h is_insidevarh]h)}(h is_insidevarh]h)}(h is_insidevarh]j)}(hjh]h is_insidevar}(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/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj/hKubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hKhj hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj hhhj/hKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubjM)}(h``is_insidevar (ptr, var)``h]jS)}(hjNh]his_insidevar (ptr, var)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjhhubji)}(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.}(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&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./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 }(hjPhhhNhNubj)}(h**ptr**h]hptr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh+ lies within the memory range allocated to }(hjPhhhNhNubj)}(h**var**h]hvar}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupper_32_bits (C macro)c.upper_32_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]j)}(hjh]h upper_32_bits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./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&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhK hjhhubji)}(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:136: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(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)}(hjh]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:136: ./include/linux/wordpart.hhK hjubj)}(hhh]j)}(h!``n`` the number we're accessing h](j)}(h``n``h]jS)}(hj-h]hn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhKhj'ubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhj$ubah}(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&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK hjubjM)}(hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h]hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the “right shift count >= width of type” warning when that quantity is 32-bits.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlower_32_bits (C macro)c.lower_32_bitshNtauh1hhjhhhNhNubh)}(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:136: ./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&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhKhjhhubji)}(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:136: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj hKhjhhubj)}(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:136: ./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:136: ./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:136: ./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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupper_16_bits (C macro)c.upper_16_bitshNtauh1hhjhhhNhNubh)}(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:136: ./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&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhKhjhhubji)}(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:136: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(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:136: ./include/linux/wordpart.hhKhjubj)}(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:136: ./include/linux/wordpart.hhKhjubj)}(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:136: ./include/linux/wordpart.hhKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlower_16_bits (C macro)c.lower_16_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]j)}(hjoh]h lower_16_bits}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjqhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjmhhhjhKubah}(h]jhah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhKhjhhubji)}(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:136: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(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:136: ./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:136: ./include/linux/wordpart.hhK#hjubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hREPEAT_BYTE (C macro) c.REPEAT_BYTEhNtauh1hhjhhhNhNubh)}(hhh](h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]j)}(hjSh]h REPEAT_BYTE}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK#ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjQhhhjphK#ubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphK#hjNhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjNhhhjphK#ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhK%hjhhubji)}(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:136: ./include/linux/wordpart.hhK#hjubah}(h]h ]h"]h$]h&]uh1jhhjhK#hjhhubj)}(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:136: ./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:136: ./include/linux/wordpart.hhK$hjubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hK$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hK$hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**NOTE**h]j)}(hj0h]hNOTE}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK&hjubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh> is not checked for > 0xff; larger values produce odd results.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK&hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hREPEAT_BYTE_U32 (C macro)c.REPEAT_BYTE_U32hNtauh1hhjhhhNhNubh)}(hhh](h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]j)}(hj}h]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:136: ./include/linux/wordpart.hhK+ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhK+ubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK+hjxhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjxhhhjhK+ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(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:136: ./include/linux/wordpart.hhK-hjhhubji)}(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:136: ./include/linux/wordpart.hhK+hjubah}(h]h ]h"]h$]h&]uh1jhhjhK+hjhhubj)}(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:136: ./include/linux/wordpart.hhK/hjubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]jS)}(hjh]hx}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK,hjubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hK,hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hK,hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**NOTE**h]j)}(hjZh]hNOTE}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK.hjubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh> is not checked for > 0xff; larger values produce odd results.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./include/linux/wordpart.hhK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_list_lock (C function)c.console_list_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_list_lock (void)h]h)}(hvoid console_list_lock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(hd**Parameters** ``void`` no arguments **Description** For console list or console->flags updatesh](jM)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhj0ubj)}(hhh]j)}(h``void`` no arguments hg](j)}(h``void``h]jS)}(hjUh]hvoid}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhjOubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhKhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjLubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhj0ubjM)}(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:139: ./kernel/printk/printk.chKhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h console_list_unlock (C function)c.console_list_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_list_unlock (void)h]h)}(hvoid console_list_unlock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj9hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(h\**Parameters** ``void`` no arguments **Description** Counterpart to 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:139: ./kernel/printk/printk.chMhjXubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj}h]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhjwubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubjM)}(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:139: ./kernel/printk/printk.chKhjXubjM)}(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:139: ./kernel/printk/printk.chM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#console_srcu_read_lock (C function)c.console_srcu_read_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h!int console_srcu_read_lock (void)h]h)}(h int console_srcu_read_lock(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(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)}(h9Register a new reader for the SRCU-protected console listh]h9Register a new reader for the SRCU-protected console list}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjahhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(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:139: ./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:139: ./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:139: ./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:139: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hjh]hContext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(h Any context.h]h Any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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().}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%console_srcu_read_unlock (C function)c.console_srcu_read_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*void console_srcu_read_unlock (int cookie)h]h)}(h)void console_srcu_read_unlock(int cookie)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhM(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&]jjuh1hhjohhhjhM(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&]jjuh1j3hjohhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhM(ubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhhubj4)}(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:139: ./kernel/printk/printk.chM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int cookie`` cookie returned from console_srcu_read_lock() **Description** Counterpart to console_srcu_read_lock()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:139: ./kernel/printk/printk.chM,hjubj)}(hhh]j)}(h=``int cookie`` cookie returned from console_srcu_read_lock() h](j)}(h``int cookie``h]jS)}(hj7h]h int cookie}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM*hj1ubj)}(hhh]jM)}(h-cookie returned from console_srcu_read_lock()h]h-cookie returned from console_srcu_read_lock()}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhM*hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM*hj.ubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM,hjubjM)}(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:139: ./kernel/printk/printk.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h7match_devname_and_update_preferred_console (C function),c.match_devname_and_update_preferred_consolehNtauh1hhjhhhNhNubh)}(hhh](h)}(hgint match_devname_and_update_preferred_console (const char *devname, const char *name, const short idx)h]h)}(hfint match_devname_and_update_preferred_console(const char *devname, const char *name, const short idx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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>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*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevnameh]hdevname}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hcharh]hchar}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhjhNhNubj)}(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)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj+ubj)}(hhh](j)}(h6``const char *devname`` DEVNAME:0.0 style device name h](j)}(h``const char *devname``h]jS)}(hjPh]hconst char *devname}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hjJubj)}(hhh]jM)}(hDEVNAME:0.0 style device nameh]hDEVNAME:0.0 style device name}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjGubj)}(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:139: ./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 hjGubj)}(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:139: ./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 hjGubeh}(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:139: ./kernel/printk/printk.chM hj+ubjM)}(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 }(hjhhhNhNubj)}(h **devname**h]hdevname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj+ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj+ubjM)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj+ubjM)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_lock (C function)c.console_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_lock (void)h]h)}(hvoid console_lock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMA hjhhubj4)}(hhh]jM)}(h)block the console subsystem from printingh]h)block the console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMA hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMA ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:139: ./kernel/printk/printk.chME hj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj2h]hvoid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhj,ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj)ubah}(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:139: ./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:139: ./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:139: ./kernel/printk/printk.chME hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_trylock (C function)c.console_trylockhNtauh1hhjhhhNhNubh)}(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:139: ./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}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMW hj%hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMW ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(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)}(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:139: ./kernel/printk/printk.chM[ hjDubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjih]hvoid}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhjcubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj`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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhjDubjM)}(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:139: ./kernel/printk/printk.chMX hjDubjM)}(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:139: ./kernel/printk/printk.chM[ hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsole_unlock (C function)c.console_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_unlock (void)h]h)}(hvoid console_unlock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMK ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMK ubh)}(hconsole_unlockh]j)}(hconsole_unlockh]hconsole_unlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMK ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMK ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMK ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMK hjhhubj4)}(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:139: ./kernel/printk/printk.chMK hj\hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMK ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjwjHjwjIjJjKuh1hhhhjhNhNubj)}(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:139: ./kernel/printk/printk.chMO 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:139: ./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&]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:139: ./kernel/printk/printk.chKhj{ubjM)}(hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.h]hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chML hj{ubjM)}(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:139: ./kernel/printk/printk.chMO hj{ubjM)}(h1console_unlock(); may be called from any context.h]h1console_unlock(); may be called from any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMS hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+console_force_preferred_locked (C function) c.console_force_preferred_lockedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9void console_force_preferred_locked (struct console *con)h]h)}(h8void console_force_preferred_locked(struct console *con)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhjLhMubh)}(hconsole_force_preferred_lockedh]j)}(hconsole_force_preferred_lockedh]hconsole_force_preferred_locked}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjLhMubj4)}(h(struct console *con)h]j:)}(hstruct console *conh](j?)}(hjBh]hstruct}(hj{hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubh)}(hhh]j)}(hconsoleh]hconsole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjasb c.console_force_preferred_lockedasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hconh]hcon}(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$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:139: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhjLhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubj)}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj9ubj)}(hhh]jM)}(h*The registered console to force preferred.h]h*The registered console to force preferred.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(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:139: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#printk_timed_ratelimit (C function)c.printk_timed_ratelimithNtauh1hhjhhhNhNubh)}(hhh](h)}(hXbool printk_timed_ratelimit (unsigned long *caller_jiffies, unsigned int interval_msecs)h]h)}(hWbool printk_timed_ratelimit(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hinterval_msecsh]hinterval_msecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(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:139: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:139: ./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:139: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hpointer to caller's stateh]hpointer to caller’s state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``unsigned int interval_msecs`` minimum interval between prints h](j)}(h``unsigned int interval_msecs``h]jS)}(hj5h]hunsigned int interval_msecs}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj/ubj)}(hhh]jM)}(hminimum interval between printsh]hminimum interval between prints}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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:139: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_dump_register (C function)c.kmsg_dump_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3int kmsg_dump_register (struct kmsg_dumper *dumper)h]h)}(h2int kmsg_dump_register(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(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}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_registerasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdumperh]hdumper}(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)}(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:139: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:139: ./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:139: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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 }(hjhhhNhNubjS)}(h ``-EINVAL``h]h-EINVAL}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh or }(hjhhhNhNubjS)}(h ``-EBUSY``h]h-EBUSY}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kmsg_dump_unregister (C function)c.kmsg_dump_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int kmsg_dump_unregister (struct kmsg_dumper *dumper)h]h)}(h4int kmsg_dump_unregister(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjzhMubh)}(hkmsg_dump_unregisterh]j)}(hkmsg_dump_unregisterh]hkmsg_dump_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjzhMubj4)}(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&]jjuh1j3hjhhhhjzhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjzhMubah}(h]j_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjahhubj4)}(hhh]jM)}(hunregister a kmsg dumper.h]hunregister a kmsg dumper.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj)hhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjHubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]jS)}(hjmh]hstruct kmsg_dumper *dumper}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjgubj)}(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&]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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjHubjM)}(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:139: ./kernel/printk/printk.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_dump_get_line (C function)c.kmsg_dump_get_linehNtauh1hhjhhhNhNubh)}(hhh](h)}(hhbool kmsg_dump_get_line (struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h]h)}(hgbool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj7ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j)}jsj!sbc.kmsg_dump_get_lineasbuh1hhj7ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(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&]noemphjjuh1j9hj3ubj:)}(h char *lineh](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)}(hlineh]hline}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(h size_t sizeh](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}]juc.kmsg_dump_get_lineasbuh1hhjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsizeh]hsize}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(h size_t *lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]juc.kmsg_dump_get_lineasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(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:139: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubj)}(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:139: ./kernel/printk/printk.chMhj ubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(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+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]jS)}(hjKh]h bool syslog}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjEubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(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:139: ./kernel/printk/printk.chMhj~ubj)}(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&]uh1jhj~ubeh}(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:139: ./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:139: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhhhNhNubah}(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&]uh1jhjubjM)}(h**Description**h]j)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kmsg_dump_get_buffer (C function)c.kmsg_dump_get_bufferhNtauh1hhjhhhNhNubh)}(hhh](h)}(hmbool kmsg_dump_get_buffer (struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h]h)}(hlbool kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMNubh)}(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&]jjuh1hhjhhhjhMNubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_get_bufferasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hiterh]hiter}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h bool syslogh](j)}(hjh]hbool}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hsyslogh]hsyslog}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h char *bufh](j)}(hcharh]hchar}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(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 reftargetjmodnameN classnameNjwjz)}j}]j c.kmsg_dump_get_bufferasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlen_outh]hlen_out}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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)}(hcopy kmsg log linesh]hcopy kmsg log lines}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMNhjchhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~jHj~jIjJjKuh1hhhhjhNhNubj)}(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:139: ./kernel/printk/printk.chMRhjubj)}(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:139: ./kernel/printk/printk.chMOhjubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(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:139: ./kernel/printk/printk.chMPhjubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h)``char *buf`` buffer to copy the line to h](j)}(h ``char *buf``h]jS)}(hjh]h char *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMQhjubj)}(hhh]jM)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hMQhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMQhjubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]jS)}(hjRh]h size_t size}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMRhjLubj)}(hhh]jM)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMRhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMRhjubj)}(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:139: ./kernel/printk/printk.chMShjubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhhhNhNubah}(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)}(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:139: ./kernel/printk/printk.chMUhjubjM)}(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:139: ./kernel/printk/printk.chMThjubjM)}(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:139: ./kernel/printk/printk.chMYhjubjM)}(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:139: ./kernel/printk/printk.chM\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkmsg_dump_rewind (C function)c.kmsg_dump_rewindhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void kmsg_dump_rewind (struct kmsg_dump_iter *iter)h]h)}(h2void kmsg_dump_rewind(struct kmsg_dump_iter *iter)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhjIhMubh)}(hkmsg_dump_rewindh]j)}(hkmsg_dump_rewindh]hkmsg_dump_rewind}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhjIhMubj4)}(h(struct kmsg_dump_iter *iter)h]j:)}(hstruct kmsg_dump_iter *iterh](j?)}(hjBh]hstruct}(hjxhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubh)}(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)}jsj^sbc.kmsg_dump_rewindasbuh1hhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubah}(h]h ]h"]h$]h&]jjuh1j3hj7hhhjIhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhjIhMubah}(h]j.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhMhj0hhubj4)}(hhh]jM)}(hreset the iteratorh]hreset the iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhjIhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:139: ./kernel/printk/printk.chMhjubj)}(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}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj6ubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjubjM)}(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:139: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#__printk_cpu_sync_wait (C function)c.__printk_cpu_sync_waithNtauh1hhjhhhNhNubh)}(hhh](h)}(h"void __printk_cpu_sync_wait (void)h]h)}(h!void __printk_cpu_sync_wait(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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&]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)}(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:139: ./kernel/printk/printk.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(hB**Parameters** ``void`` no arguments **Context** Any context.h](jM)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj?ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjdh]hvoid}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhj^ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj[ubah}(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:139: ./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:139: ./kernel/printk/printk.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&__printk_cpu_sync_try_get (C function)c.__printk_cpu_sync_try_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h$int __printk_cpu_sync_try_get (void)h]h)}(h#int __printk_cpu_sync_try_get(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./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}(hjhhhNhNubah}(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&]uh1jhjubah}(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)}(h6Try to acquire the printk cpu-reentrant spinning lock.h]h6Try to acquire the printk cpu-reentrant spinning lock.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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)}(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:139: ./kernel/printk/printk.chMhjgubj)}(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:139: ./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&]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:139: ./kernel/printk/printk.chKhjgubjM)}(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:139: ./kernel/printk/printk.chMhjgubjM)}(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:139: ./kernel/printk/printk.chMhjgubjM)}(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:139: ./kernel/printk/printk.chMhjgubjM)}(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:139: ./kernel/printk/printk.chMhjgubjM)}(h1 on success, otherwise 0.h]h1 on success, otherwise 0.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"__printk_cpu_sync_put (C function)c.__printk_cpu_sync_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void __printk_cpu_sync_put (void)h]h)}(h void __printk_cpu_sync_put(void)h](j)}(hvoidh]hvoid}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMubjQ)}(h h]h }(hji hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV hhhjh hMubh)}(h__printk_cpu_sync_puth]j)}(h__printk_cpu_sync_puth]h__printk_cpu_sync_put}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjV hhhjh hMubj4)}(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&]jjuh1j3hjV hhhjh hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjR hhhjh hMubah}(h]jM ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjh hMhjO hhubj4)}(hhh]jM)}(h/Release the printk cpu-reentrant spinning lock.h]h/Release the printk cpu-reentrant spinning lock.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjO hhhjh hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:139: ./kernel/printk/printk.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&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chKhj ubjM)}(h4The calling processor must be the owner of the lock.h]h4The calling processor must be the owner of the lock.}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj ubjM)}(h **Context**h]j)}(hjd h]hContext}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chMhj ubjM)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:139: ./kernel/printk/printk.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvpanic (C function)c.vpanichNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void vpanic (const char *fmt, va_list args)h]h)}(h*void vpanic(const char *fmt, va_list args)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM;ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hM;ubh)}(hvpanich]j)}(hvpanich]hvpanic}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hM;ubj4)}(h(const char *fmt, va_list args)h](j:)}(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 va_list argsh](h)}(hhh]j)}(hva_listh]hva_list}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjH modnameN classnameNjwjz)}j}]j)}jsj sbc.vpanicasbuh1hhj? ubjQ)}(h h]h }(hjf hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj? ubj)}(hargsh]hargs}(hjt 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)}(hhalt the systemh]hhalt the system}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM;hj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:143: ./kernel/panic.chM?hj ubj)}(hhh](j)}(h-``const char *fmt`` The text string to print 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&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM<hj ubj)}(hhh]jM)}(hThe text string to printh]hThe text string to print}(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)}(h1``va_list args`` Arguments for the format string h](j)}(h``va_list args``h]jS)}(hj h]h va_list args}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM=hj ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(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=hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjS h]h Description}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM?hj ubjM)}(hFDisplay a message, then perform cleanups. This function never returns.h]hFDisplay a message, then perform cleanups. This function never returns.}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chM>hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_taint (C function) c.add_tainthNtauh1hhjhhhNhNubh)}(hhh](h)}(h:void add_taint (unsigned flag, enum lockdep_ok lockdep_ok)h]h)}(h9void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(h add_tainth]j)}(h add_tainth]h add_taint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(h+(unsigned flag, enum lockdep_ok lockdep_ok)h](j:)}(h unsigned flagh](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)}(hflagh]hflag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(henum lockdep_ok lockdep_okh](j?)}(hjh]henum}(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 lockdep_okh]h lockdep_ok}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj* modnameN classnameNjwjz)}j}]j)}jsj sb c.add_taintasbuh1hhj ubjQ)}(h h]h }(hjH hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(h lockdep_okh]h lockdep_ok}(hjV 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$add a taint flag if not already set.h]h$add a taint flag if not already set.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMhj} hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:143: ./kernel/panic.chMhj ubj)}(hhh](j)}(h0``unsigned flag`` one of the TAINT_* constants. h](j)}(h``unsigned flag``h]jS)}(hj h]h unsigned flag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMhj ubj)}(hhh]jM)}(hone of the TAINT_* constants.h]hone of the TAINT_* constants.}(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)}(hC``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. h](j)}(h``enum lockdep_ok lockdep_ok``h]jS)}(hj h]henum lockdep_ok lockdep_ok}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMhj ubj)}(hhh]jM)}(h#whether lock debugging is still OK.h]h#whether lock debugging is still OK.}(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)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMhj ubjM)}(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 }(hjKhhhNhNubj)}(h**lockdebug_ok**h]h lockdebug_ok}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubhR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:143: ./kernel/panic.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]kernel-utility-functionsah ]h"]kernel utility functionsah$]h&]uh1hhhhhhhhKvubh)}(hhh](h)}(hDevice Resource Managementh]hDevice Resource Management}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __devres_alloc_node (C function)c.__devres_alloc_nodehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hdvoid * __devres_alloc_node (dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h]h)}(hbvoid *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.__devres_alloc_nodeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]jc.__devres_alloc_nodeasbuh1hhj5ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hsizeh]hsize}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(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.__devres_alloc_nodeasbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(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)}(hAllocate device resource datah]hAllocate device resource data}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjihhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(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:149: ./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:149: ./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:149: ./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)}(hjh]h gfp_t gfp}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hAllocation flagsh]hAllocation flags}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjubj)}(h``int nid`` NUMA node h](j)}(h ``int nid``h]jS)}(hjXh]hint nid}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjRubj)}(hhh]jM)}(h NUMA nodeh]h NUMA node}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjubj)}(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:149: ./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:149: ./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:149: ./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:149: ./drivers/base/devres.chKhjubjM)}(h8Pointer to allocated devres on success, NULL on failure.h]h8Pointer to allocated devres on success, NULL on failure.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devres_for_each_res (C function)c.devres_for_each_reshNtauh1hhj{hhhNhNubh)}(hhh](h)}(hvoid devres_for_each_res (struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device *, void *, void *), void *data)h]h)}(hvoid devres_for_each_res(struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device*, void*, void*), void *data)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjjhKubh)}(hdevres_for_each_resh]j)}(hdevres_for_each_resh]hdevres_for_each_res}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjjhKubj4)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjubjQ)}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjOubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfnh]hfn}(hjhhhNhNubah}(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}(hj;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjubj)}(hjh]h*}(hjwhhhNhNubah}(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)}(hjhhhNhNubah}(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*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjThhhjjhKubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhKhjQhhubj4)}(hhh]jM)}(hResource iteratorh]hResource iterator}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjXhhubah}(h]h ]h"]h$]h&]uh1j3hjQhhhjjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjsjHjsjIjJjKuh1hhhhj{hNhNubj)}(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)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjwubj)}(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:149: ./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:149: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(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)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjGh]hvoid *match_data}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjAubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjubj)}(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&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjzubj)}(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&]uh1jhjzubeh}(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:149: ./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&]uh1jhjwubjM)}(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:149: ./drivers/base/devres.chKhjwubjM)}(hnCall **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1.h](hCall }(hj*hhhNhNubj)}(h**fn**h]hfn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh for each devres of }(hj*hhhNhNubj)}(h**dev**h]hdev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh which is associated with }(hj*hhhNhNubj)}(h **release**h]hrelease}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh and for which }(hj*hhhNhNubj)}(h **match**h]hmatch}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh returns 1.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjwubjM)}(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:149: ./drivers/base/devres.chKhjwubjM)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_free (C function) c.devres_freehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hvoid devres_free (void *res)h]h)}(hvoid devres_free(void *res)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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}(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)}(hresh]hres}(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)}(hFree device resource datah]hFree device resource data}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhj{hNhNubj)}(hy**Parameters** ``void *res`` Pointer to devres data to free **Description** Free devres created with devres_alloc().h](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chKhjtubj)}(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:149: ./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&]uh1jhjtubjM)}(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:149: ./drivers/base/devres.chKhjtubjM)}(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:149: ./drivers/base/devres.chKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_add (C function) c.devres_addhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h/void devres_add (struct device *dev, void *res)h]h)}(h.void devres_add(struct device *dev, void *res)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hM ubh)}(h devres_addh]j)}(h devres_addh]h devres_add}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hM ubj4)}(h(struct device *dev, void *res)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjRubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubh)}(hhh]j)}(hdeviceh]hdevice}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j)}jsj<sb c.devres_addasbuh1hhjRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(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)}(hRegister device resourceh]hRegister device resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chMhj7ubj)}(hhh](j)}(h1``struct device *dev`` Device to add resource to h](j)}(h``struct device *dev``h]jS)}(hj\h]hstruct device *dev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjVubj)}(hhh]jM)}(hDevice to add resource toh]hDevice to add resource to}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubj)}(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:149: ./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&]uh1jhjhMhjSubeh}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj7ubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h**res**h]hres}(hjhhhNhNubah}(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:149: ./drivers/base/devres.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_find (C function) c.devres_findhNtauh1hhj{hhhNhNubh)}(hhh](h)}(havoid * devres_find (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h_void *devres_find(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM2ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjYhM2ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhM2ubh)}(h devres_findh]j)}(h devres_findh]h devres_find}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjYhM2ubj4)}(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)}jsj{sb 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}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j c.devres_findasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hj6hhhNhNubah}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]j c.devres_findasbuh1hhjKubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hmatchh]hmatch}(hj~hhhNhNubah}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjYhM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjChhhjYhM2ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhM2hj@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:149: ./drivers/base/devres.chM2hjhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhjYhM2ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj{hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM6hjubj)}(hhh](j)}(h6``struct device *dev`` Device to lookup resource from 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:149: ./drivers/base/devres.chM3hj%ubj)}(hhh]jM)}(hDevice to lookup resource fromh]hDevice to lookup resource from}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM3hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(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)}(hjdh]hdr_release_t release}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM4hj^ubj)}(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&]uh1jLhjyhM4hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM4hj"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:149: ./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:149: ./drivers/base/devres.chM6hjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hj"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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM8hjubjM)}(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 }(hj'hhhNhNubj)}(h**dev**h]hdev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh which is associated with }(hj'hhhNhNubj)}(h **release**h]hrelease}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh and for which }(hj'hhhNhNubj)}(h **match**h]hmatch}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh returns 1. If }(hj'hhhNhNubj)}(h **match**h]hmatch}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh) is NULL, it’s considered to match all.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM7hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM;hjubjM)}(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:149: ./drivers/base/devres.chM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_get (C function) c.devres_gethNtauh1hhj{hhhNhNubh)}(hhh](h)}(hYvoid * devres_get (struct device *dev, void *new_res, dr_match_t match, void *match_data)h]h)}(hWvoid *devres_get(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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&]uh1jhjubah}(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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(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)}jsjsb c.devres_getasbuh1hhj ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h void *new_resh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hnew_resh]hnew_res}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jI 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&]noemphjjuh1j9hjubj:)}(hvoid *match_datah](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)}(h match_datah]h match_data}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMNhj[ hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjv jHjv jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chMRhjz ubj)}(hhh](j)}(h:``struct device *dev`` Device to lookup or add devres 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:149: ./drivers/base/devres.chMOhj ubj)}(hhh]jM)}(h"Device to lookup or add devres forh]h"Device to lookup or add devres for}(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)}(hH``void *new_res`` Pointer to new initialized devres to add if not found h](j)}(h``void *new_res``h]jS)}(hj h]h void *new_res}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMPhj ubj)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMPhj ubj)}(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:149: ./drivers/base/devres.chMQhj !ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hj*!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&!hMQhj'!ubah}(h]h ]h"]h$]h&]uh1jhj !ubeh}(h]h ]h"]h$]h&]uh1jhj&!hMQhj ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjJ!h]hvoid *match_data}(hjL!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjH!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMRhjD!ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjc!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_!hMRhj`!ubah}(h]h ]h"]h$]h&]uh1jhjD!ubeh}(h]h ]h"]h$]h&]uh1jhj_!hMRhj 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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMThjz ubjM)}(hFind the latest devres of **dev** which has the same release function as **new_res** and for which **match** return 1. If found, **new_res** is freed; otherwise, **new_res** is added atomically.h](hFind the latest devres of }(hj!hhhNhNubj)}(h**dev**h]hdev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh( which has the same release function as }(hj!hhhNhNubj)}(h **new_res**h]hnew_res}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh and for which }(hj!hhhNhNubj)}(h **match**h]hmatch}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh return 1. If found, }(hj!hhhNhNubj)}(h **new_res**h]hnew_res}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh is freed; otherwise, }(hj!hhhNhNubj)}(h **new_res**h]hnew_res}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh is added atomically.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMShjz 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:149: ./drivers/base/devres.chMWhjz ubjM)}(h!Pointer to found or added devres.h]h!Pointer to found or added devres.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMXhjz ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_remove (C function)c.devres_removehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hcvoid * devres_remove (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(havoid *devres_remove(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjK"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG"hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjZ"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjG"hhhjY"hMubj)}(hjh]h*}(hjh"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG"hhhjY"hMubh)}(h devres_removeh]j)}(h devres_removeh]h devres_remove}(hjy"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjG"hhhjY"hMubj4)}(hN(struct device *dev, dr_release_t release, 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 }(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_removeasbuh1hhj"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:)}(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_removeasbuh1hhj#ubjQ)}(h h]h }(hj(#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hreleaseh]hrelease}(hj6#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjR#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjT#modnameN classnameNjwjz)}j}]j"c.devres_removeasbuh1hhjK#ubjQ)}(h h]h }(hjp#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK#ubj)}(hmatchh]hmatch}(hj~#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK#ubeh}(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 }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h match_datah]h match_data}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubeh}(h]h ]h"]h$]h&]jjuh1j3hjG"hhhjY"hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjC"hhhjY"hMubah}(h]j>"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjY"hMhj@"hhubj4)}(hhh]jM)}(h$Find a device resource and remove ith]h$Find a device resource and remove it}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj#hhubah}(h]h ]h"]h$]h&]uh1j3hj@"hhhjY"hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhj{hNhNubj)}(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:149: ./drivers/base/devres.chMhj$ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from 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:149: ./drivers/base/devres.chMhj%$ubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjD$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@$hMhjA$ubah}(h]h ]h"]h$]h&]uh1jhj%$ubeh}(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)}(hjd$h]hdr_release_t release}(hjf$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjb$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj^$ubj)}(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&]uh1jLhjy$hMhjz$ubah}(h]h ]h"]h$]h&]uh1jhj^$ubeh}(h]h ]h"]h$]h&]uh1jhjy$hMhj"$ubj)}(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:149: ./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$hMhj"$ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hj$h]hvoid *match_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:149: ./drivers/base/devres.chMhj$ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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 }(hj'%hhhNhNubj)}(h**dev**h]hdev}(hj/%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh associated with }(hj'%hhhNhNubj)}(h **release**h]hrelease}(hjA%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh and for which }(hj'%hhhNhNubj)}(h **match**h]hmatch}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubh returns 1. If }(hj'%hhhNhNubj)}(h **match**h]hmatch}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubhe is NULL, it’s considered to match all. If found, the resource is removed atomically and returned.}(hj'%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj$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:149: ./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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_destroy (C function)c.devres_destroyhNtauh1hhj{hhhNhNubh)}(hhh](h)}(haint devres_destroy (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_destroy(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hMubh)}(hdevres_destroyh]j)}(hdevres_destroyh]hdevres_destroy}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%hMubj4)}(hN(struct device *dev, dr_release_t release, 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 }(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_destroyasbuh1hhj%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)}(hdevh]hdev}(hj[&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjw&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjy&modnameN classnameNjwjz)}j}]j<&c.devres_destroyasbuh1hhjp&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp&ubj)}(hreleaseh]hrelease}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j<&c.devres_destroyasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hmatchh]hmatch}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(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 }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]h*}(hj 'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h match_datah]h match_data}(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%Find a device resource and destroy ith]h%Find a device resource and destroy it}(hjW'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjT'hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjo'jHjo'jIjJjKuh1hhhhj{hNhNubj)}(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)}(hjy'h]h Parameters}(hj{'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw'ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjs'ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from 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:149: ./drivers/base/devres.chMhj'ubj)}(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&]uh1jhj'ubeh}(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)}(hj'h]hdr_release_t release}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj'ubj)}(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&]uh1jLhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(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)}(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:149: ./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(hMhj'ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjC(h]hvoid *match_data}(hjE(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjA(ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=(ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(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&]uh1jhjs'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:149: ./drivers/base/devres.chMhjs'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 freed.h](hFind the latest devres of }(hj(hhhNhNubj)}(h**dev**h]hdev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh associated with }(hj(hhhNhNubj)}(h **release**h]hrelease}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh and for which }(hj(hhhNhNubj)}(h **match**h]hmatch}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh returns 1. If }(hj(hhhNhNubj)}(h **match**h]hmatch}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubhb is NULL, it’s considered to match all. If found, the resource is removed atomically and freed.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjs'ubjM)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjs'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:149: ./drivers/base/devres.chMhjs'ubjM)}(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:149: ./drivers/base/devres.chMhjs'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_release (C function)c.devres_releasehNtauh1hhj{hhhNhNubh)}(hhh](h)}(haint devres_release (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_release(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hjA)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=)hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjP)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=)hhhjO)hMubh)}(hdevres_releaseh]j)}(hdevres_releaseh]hdevres_release}(hjb)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=)hhhjO)hMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj~)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjz)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjz)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)}jsjd)sbc.devres_releaseasbuh1hhjz)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjz)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz)ubj)}(hdevh]hdev}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv)ubj:)}(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_releaseasbuh1hhj)ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hreleaseh]hrelease}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv)ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hj;*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8*ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=*modnameN classnameNjwjz)}j}]j)c.devres_releaseasbuh1hhj4*ubjQ)}(h h]h }(hjY*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4*ubj)}(hmatchh]hmatch}(hjg*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv)ubj:)}(hvoid *match_datah](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)}(h match_datah]h match_data}(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)}(h6Find a device resource and destroy it, calling releaseh]h6Find a device resource and destroy it, calling release}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj*hhubah}(h]h ]h"]h$]h&]uh1j3hj6)hhhjO)hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chMhj*ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from 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:149: ./drivers/base/devres.chMhj+ubj)}(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&]uh1jhj+ubeh}(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)}(hjM+h]hdr_release_t release}(hjO+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjK+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjG+ubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjf+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjb+hMhjc+ubah}(h]h ]h"]h$]h&]uh1jhjG+ubeh}(h]h ]h"]h$]h&]uh1jhjb+hMhj +ubj)}(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:149: ./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+hMhj +ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hj+h]hvoid *match_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:149: ./drivers/base/devres.chMhj+ubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh associated with }(hj,hhhNhNubj)}(h **release**h]hrelease}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh and for which }(hj,hhhNhNubj)}(h **match**h]hmatch}(hj<,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh returns 1. If }(hj,hhhNhNubj)}(h **match**h]hmatch}(hjN,hhhNhNubah}(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:149: ./drivers/base/devres.chMhj*ubjM)}(h **Return**h]j)}(hji,h]hReturn}(hjk,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg,ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_open_group (C function)c.devres_open_grouphNtauh1hhj{hhhNhNubh)}(hhh](h)}(hBvoid * devres_open_group (struct device *dev, void *id, gfp_t gfp)h]h)}(h@void *devres_open_group(struct device *dev, void *id, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMLubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj,hMLubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hMLubh)}(hdevres_open_grouph]j)}(hdevres_open_grouph]hdevres_open_group}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj,hMLubj4)}(h)(struct device *dev, void *id, 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.devres_open_groupasbuh1hhj,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)}(hdevh]hdev}(hjQ-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf-ubjQ)}(h h]h }(hjx-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf-ubj)}(hidh]hid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf-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}]j2-c.devres_open_groupasbuh1hhj-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&]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)}(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:149: ./drivers/base/devres.chMLhj.hhubah}(h]h ]h"]h$]h&]uh1j3hj,hhhj,hMLubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj.jHj.jIjJjKuh1hhhhj{hNhNubj)}(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.Rh](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:149: ./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)}(hjF.h]hstruct device *dev}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjD.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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&]uh1jLhj[.hMMhj\.ubah}(h]h ]h"]h$]h&]uh1jhj@.ubeh}(h]h ]h"]h$]h&]uh1jhj[.hMMhj=.ubj)}(h``void *id`` Separator ID h](j)}(h ``void *id``h]jS)}(hj.h]hvoid *id}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMNhjy.ubj)}(hhh]jM)}(h Separator IDh]h Separator ID}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hMNhj.ubah}(h]h ]h"]h$]h&]uh1jhjy.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMNhj=.ubj)}(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&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMOhj.ubj)}(hhh]jM)}(hAllocation flagsh]hAllocation flags}(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)}(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:149: ./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}(hj5/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}(hjG/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:149: ./drivers/base/devres.chMPhj!.ubjM)}(h **Return**h]j)}(hjb/h]hReturn}(hjd/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`/ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMThj!.ubjM)}(h%ID of the new group, NULL on failure.h]h%ID of the new group, NULL on failure.}(hjx/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMUhj!.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_close_group (C function)c.devres_close_grouphNtauh1hhj{hhhNhNubh)}(hhh](h)}(h6void devres_close_group (struct device *dev, void *id)h]h)}(h5void devres_close_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j)}jsj/sbc.devres_close_groupasbuh1hhj/ubjQ)}(h h]h }(hj"0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hj00hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hdevh]hdev}(hj=0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjV0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR0ubjQ)}(h h]h }(hjd0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjR0ubj)}(hjh]h*}(hjr0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR0ubj)}(hidh]hid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR0ubeh}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj0hhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhj/hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhj{hNhNubj)}(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)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj0ubj)}(hhh](j)}(h8``struct device *dev`` Device to close devres group for h](j)}(h``struct device *dev``h]jS)}(hj0h]hstruct device *dev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj0ubj)}(hhh]jM)}(h Device to close devres group forh]h Device to close devres group for}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hj#1h]hvoid *id}(hj%1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj1ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj<1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj81hMhj91ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj81hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hj^1h]h Description}(hj`1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\1ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj0ubjM)}(h\Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](hClose the group identified by }(hjt1hhhNhNubj)}(h**id**h]hid}(hj|1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt1ubh. If }(hjt1hhhNhNubj)}(h**id**h]hid}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt1ubh, is NULL, the latest open group is selected.}(hjt1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devres_remove_group (C function)c.devres_remove_grouphNtauh1hhj{hhhNhNubh)}(hhh](h)}(h7void devres_remove_group (struct device *dev, void *id)h]h)}(h6void devres_remove_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hMubh)}(hdevres_remove_grouph]j)}(hdevres_remove_grouph]hdevres_remove_group}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhj1hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubh)}(hhh]j)}(hdeviceh]hdevice}(hj"2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$2modnameN classnameNjwjz)}j}]j)}jsj1sbc.devres_remove_groupasbuh1hhj2ubjQ)}(h h]h }(hjB2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjP2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hdevh]hdev}(hj]2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjv2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjr2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubj)}(hidh]hid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubeh}(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)}(hRemove a devres grouph]hRemove a devres group}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj2hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chMhj2ubj)}(hhh](j)}(h2``struct device *dev`` Device to remove group for h](j)}(h``struct device *dev``h]jS)}(hj 3h]hstruct device *dev}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj3ubj)}(hhh]jM)}(hDevice to remove group forh]hDevice to remove group for}(hj#3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj 3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hjC3h]hvoid *id}(hjE3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjA3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=3ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj\3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjX3hMhjY3ubah}(h]h ]h"]h$]h&]uh1jhj=3ubeh}(h]h ]h"]h$]h&]uh1jhjX3hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hj~3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|3ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj2ubjM)}(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 }(hj3hhhNhNubj)}(h**id**h]hid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh. If }(hj3hhhNhNubj)}(h**id**h]hid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubhn is NULL, the latest open group is selected. Note that removing a group doesn’t affect any other resources.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!devres_release_group (C function)c.devres_release_grouphNtauh1hhj{hhhNhNubh)}(hhh](h)}(h7int devres_release_group (struct device *dev, void *id)h]h)}(h6int devres_release_group(struct device *dev, void *id)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubh)}(hdevres_release_grouph]j)}(hdevres_release_grouph]hdevres_release_group}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj$4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj 4ubjQ)}(h h]h }(hj14hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 4ubh)}(hhh]j)}(hdeviceh]hdevice}(hjB4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD4modnameN classnameNjwjz)}j}]j)}jsj 4sbc.devres_release_groupasbuh1hhj 4ubjQ)}(h h]h }(hjb4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 4ubj)}(hjh]h*}(hjp4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubj)}(hdevh]hdev}(hj}4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hidh]hid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(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#Release resources in a devres grouph]h#Release resources in a devres group}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj4hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhj{hNhNubj)}(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 5h]h Parameters}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 5ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj5ubj)}(hhh](j)}(h3``struct device *dev`` Device to release group for h](j)}(h``struct device *dev``h]jS)}(hj*5h]hstruct device *dev}(hj,5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj$5ubj)}(hhh]jM)}(hDevice to release group forh]hDevice to release group for}(hjC5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?5hMhj@5ubah}(h]h ]h"]h$]h&]uh1jhj$5ubeh}(h]h ]h"]h$]h&]uh1jhj?5hMhj!5ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hjc5h]hvoid *id}(hje5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja5ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj]5ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj|5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx5hMhjy5ubah}(h]h ]h"]h$]h&]uh1jhj]5ubeh}(h]h ]h"]h$]h&]uh1jhjx5hMhj!5ubeh}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj5ubjM)}(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 }(hj5hhhNhNubj)}(h**id**h]hid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh. If }(hj5hhhNhNubj)}(h**id**h]hid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj5ubjM)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj5ubjM)}(h+The number of released non-group resources.h]h+The number of released non-group resources.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__devm_add_action (C function)c.__devm_add_actionhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h`int __devm_add_action (struct device *dev, void (*action)(void *), void *data, const char *name)h]h)}(h^int __devm_add_action(struct device *dev, void (*action)(void*), void *data, const char *name)h](j)}(hinth]hint}(hj.6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*6hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM ubjQ)}(h h]h }(hj=6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*6hhhj<6hM ubh)}(h__devm_add_actionh]j)}(h__devm_add_actionh]h__devm_add_action}(hjO6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*6hhhj<6hM ubj4)}(hI(struct device *dev, void (*action)(void*), void *data, const char *name)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjk6hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjg6ubjQ)}(h h]h }(hjx6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg6ubh)}(hhh]j)}(hdeviceh]hdevice}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsjQ6sbc.__devm_add_actionasbuh1hhjg6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjg6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg6ubj)}(hdevh]hdev}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc6ubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjsh]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hactionh]haction}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h)}(hj!7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjsh]h(}(hj.7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hvoidh]hvoid}(hj;7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hjI7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h)}(hjV7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc6ubj:)}(h void *datah](j)}(hvoidh]hvoid}(hjn7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj7ubjQ)}(h h]h }(hj|7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj7ubj)}(hdatah]hdata}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc6ubj:)}(hconst char *nameh](j?)}(hj h]hconst}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hnameh]hname}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjc6ubeh}(h]h ]h"]h$]h&]jjuh1j3hj*6hhhj<6hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&6hhhj<6hM ubah}(h]j!6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<6hM hj#6hhubj4)}(hhh]jM)}(h0add a custom action to list of managed resourcesh]h0add a custom action to list of managed resources}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM hj8hhubah}(h]h ]h"]h$]h&]uh1j3hj#6hhhj<6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj68jHj68jIjJjKuh1hhhhj{hNhNubj)}(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@8h]h Parameters}(hjB8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>8ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj:8ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]jS)}(hj_8h]hstruct device *dev}(hja8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjY8ubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(hjx8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjt8hMhju8ubah}(h]h ]h"]h$]h&]uh1jhjY8ubeh}(h]h ]h"]h$]h&]uh1jhjt8hMhjV8ubj)}(h:``void (*action)(void *)`` Function that should be called h](j)}(h``void (*action)(void *)``h]jS)}(hj8h]hvoid (*action)(void *)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj8ubj)}(hhh]jM)}(hFunction that should be calledh]hFunction that should be called}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjV8ubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]jS)}(hj8h]h void *data}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj8ubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hj8hhhNhNubj)}(h **action**h]haction}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh implementation}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjV8ubj)}(hC``const char *name`` Name of the resource (for debugging purposes) h](j)}(h``const char *name``h]jS)}(hj9h]hconst char *name}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj9ubj)}(hhh]jM)}(h-Name of the resource (for debugging purposes)h]h-Name of the resource (for debugging purposes)}(hj59hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj19hMhj29ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj19hMhjV8ubeh}(h]h ]h"]h$]h&]uh1jhj:8ubjM)}(h**Description**h]j)}(hjW9h]h Description}(hjY9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU9ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj:8ubjM)}(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.}(hjm9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj:8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&devm_remove_action_nowarn (C function)c.devm_remove_action_nowarnhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hVint devm_remove_action_nowarn (struct device *dev, void (*action)(void *), void *data)h]h)}(hTint devm_remove_action_nowarn(struct device *dev, void (*action)(void*), void *data)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMZubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhj9hMZubh)}(hdevm_remove_action_nowarnh]j)}(hdevm_remove_action_nowarnh]hdevm_remove_action_nowarn}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhj9hMZubj4)}(h7(struct device *dev, void (*action)(void*), void *data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(hdeviceh]hdevice}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsj9sbc.devm_remove_action_nowarnasbuh1hhj9ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hj%:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hdevh]hdev}(hj2:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjK:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubjQ)}(h h]h }(hjY:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjG:ubj)}(hjsh]h(}(hjg:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hjh]h*}(hjt:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hactionh]haction}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hjh]h)}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hjsh]h(}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubj)}(hjh]h)}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h void *datah](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)}(hdatah]hdata}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhj9hMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj9hMZubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMZhj9hhubj4)}(hhh]jM)}(h&removes previously added custom actionh]h&removes previously added custom action}(hj/;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMZhj,;hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj9hMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjG;jHjG;jIjJjKuh1hhhhj{hNhNubj)}(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)}(hjQ;h]h Parameters}(hjS;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO;ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM^hjK;ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]jS)}(hjp;h]hstruct device *dev}(hjr;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjn;ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM[hjj;ubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(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)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]jS)}(hj;h]hvoid (*action)(void *)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM\hj;ubj)}(hhh]jM)}(h Function implementing the actionh]h Function implementing the action}(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)}(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:149: ./drivers/base/devres.chM]hj;ubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hj;hhhNhNubj)}(h **action**h]haction}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh implementation}(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;ubeh}(h]h ]h"]h$]h&]uh1jhjK;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:149: ./drivers/base/devres.chM_hjK;ubjM)}(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 }(hjE<hhhNhNubj)}(h **action**h]haction}(hjM<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE<ubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hjE<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM^hjK;ubjM)}(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.}(hjf<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMahjK;ubjM)}(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.}(hju<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMdhjK;ubjM)}(h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.h]h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMghjK;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:149: ./drivers/base/devres.chMjhjK;ubjM)}(h80 on success, -ENOENT if no entry could have been found.h]h80 on success, -ENOENT if no entry could have been found.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMkhjK;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devm_release_action (C function)c.devm_release_actionhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hQvoid devm_release_action (struct device *dev, void (*action)(void *), void *data)h]h)}(hOvoid devm_release_action(struct device *dev, void (*action)(void*), void *data)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM~ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhj<hM~ubh)}(hdevm_release_actionh]j)}(hdevm_release_actionh]hdevm_release_action}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhj<hM~ubj4)}(h7(struct device *dev, void (*action)(void*), void *data)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}(hj5=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7=modnameN classnameNjwjz)}j}]j)}jsj<sbc.devm_release_actionasbuh1hhj=ubjQ)}(h h]h }(hjU=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hjc=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hdevh]hdev}(hjp=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hvoid (*action)(void*)h](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)}(hjsh]h(}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hactionh]haction}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h)}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjsh]h(}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h)}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(h void *datah](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*}(hj6>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hdatah]hdata}(hjC>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&release previously added custom actionh]h&release previously added custom action}(hjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM~hjj>hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhj<hM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chMhj>ubj)}(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&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj>ubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(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 (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]jS)}(hj>h]hvoid (*action)(void *)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj>ubj)}(hhh]jM)}(h Function implementing the actionh]h Function implementing the action}(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)}(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:149: ./drivers/base/devres.chMhj?ubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hj9?hhhNhNubj)}(h **action**h]haction}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9?ubh implementation}(hj9?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj5?hMhj6?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj5?hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubjM)}(h**Description**h]j)}(hjm?h]h Description}(hjo?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk?ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj>ubjM)}(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 }(hj?hhhNhNubj)}(h **action**h]haction}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubhg previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmalloc (C function)c.devm_kmallochNtauh1hhj{hhhNhNubh)}(hhh](h)}(h@void * devm_kmalloc (struct device *dev, size_t size, gfp_t gfp)h]h)}(h>void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hMubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hMubh)}(h devm_kmalloch]j)}(h devm_kmalloch]h devm_kmalloc}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhj?hMubj4)}(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 }(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_kmallocasbuh1hhj @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)}(hdevh]hdev}(hjg@hhhNhNubah}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]jH@c.devm_kmallocasbuh1hhj|@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|@ubj)}(hsizeh]hsize}(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}]jH@c.devm_kmallocasbuh1hhj@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&]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)}(hResource-managed kmalloch]hResource-managed kmalloc}(hj!AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhj?hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9AjHj9AjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjCAh]h Parameters}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAAubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=Aubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjbAh]hstruct device *dev}(hjdAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`Aubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj\Aubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj{AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwAhMhjxAubah}(h]h ]h"]h$]h&]uh1jhj\Aubeh}(h]h ]h"]h$]h&]uh1jhjwAhMhjYAubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]jS)}(hjAh]h size_t size}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjAubj)}(hhh]jM)}(hAllocation sizeh]hAllocation size}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjYAubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hjAh]h gfp_t gfp}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjAubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjYAubeh}(h]h ]h"]h$]h&]uh1jhj=AubjM)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=AubjM)}(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.}(hj%BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=AubjM)}(h **Return**h]j)}(hj6Bh]hReturn}(hj8BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Bubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=AubjM)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjLBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj=Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_krealloc (C function)c.devm_kreallochNtauh1hhj{hhhNhNubh)}(hhh](h)}(hPvoid * devm_krealloc (struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h]h)}(hNvoid *devm_krealloc(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj{BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwBhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwBhhhjBhMubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwBhhhjBhMubh)}(h devm_krealloch]j)}(h devm_krealloch]h devm_krealloc}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwBhhhjBhMubj4)}(h;(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjBhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubh)}(hhh]j)}(hdeviceh]hdevice}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j)}jsjBsbc.devm_kreallocasbuh1hhjBubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hdevh]hdev}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h void *ptrh](j)}(hvoidh]hvoid}(hj7ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3CubjQ)}(h h]h }(hjEChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3Cubj)}(hjh]h*}(hjSChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Cubj)}(hptrh]hptr}(hj`ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Cubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(hsize_t new_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj|ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~CmodnameN classnameNjwjz)}j}]jBc.devm_kreallocasbuh1hhjuCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuCubj)}(hnew_sizeh]hnew_size}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]jBc.devm_kreallocasbuh1hhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hgfph]hgfp}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hjwBhhhjBhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjsBhhhjBhMubah}(h]jnBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMhjpBhhubj4)}(hhh]jM)}(hResource-managed krealloc()h]hResource-managed krealloc()}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hjpBhhhjBhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2DjHj2DjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Dubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj6Dubj)}(hhh](j)}(h8``struct device *dev`` Device to re-allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj[Dh]hstruct device *dev}(hj]DhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjUDubj)}(hhh]jM)}(h Device to re-allocate memory forh]h Device to re-allocate memory for}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjpDhMhjqDubah}(h]h ]h"]h$]h&]uh1jhjUDubeh}(h]h ]h"]h$]h&]uh1jhjpDhMhjRDubj)}(h9``void *ptr`` Pointer to the memory chunk to re-allocate h](j)}(h ``void *ptr``h]jS)}(hjDh]h void *ptr}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjDubj)}(hhh]jM)}(h*Pointer to the memory chunk to re-allocateh]h*Pointer to the memory chunk to re-allocate}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjRDubj)}(h(``size_t new_size`` New allocation size h](j)}(h``size_t new_size``h]jS)}(hjDh]hsize_t new_size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjDubj)}(hhh]jM)}(hNew allocation sizeh]hNew allocation size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjRDubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hjEh]h gfp_t gfp}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjEubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjRDubeh}(h]h ]h"]h$]h&]uh1jhj6DubjM)}(h**Description**h]j)}(hjAEh]h Description}(hjCEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Eubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj6DubjM)}(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 }(hjWEhhhNhNubj)}(h**ptr**h]hptr}(hj_EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWEubhX 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.}(hjWEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj6Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kstrdup (C function)c.devm_kstrduphNtauh1hhj{hhhNhNubh)}(hhh](h)}(hBchar * devm_kstrdup (struct device *dev, const char *s, gfp_t gfp)h]h)}(h@char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp)h](j)}(hcharh]hchar}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM,ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjEhM,ubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhM,ubh)}(h devm_kstrduph]j)}(h devm_kstrduph]h devm_kstrdup}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjEhM,ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubh)}(hhh]j)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsjEsbc.devm_kstrdupasbuh1hhjEubjQ)}(h h]h }(hj FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hj.FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hdevh]hdev}(hj;FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(h const char *sh](j?)}(hj h]hconst}(hjTFhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjPFubjQ)}(h h]h }(hjaFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPFubj)}(hcharh]hchar}(hjoFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPFubjQ)}(h h]h }(hj}FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPFubj)}(hsh]hs}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jFc.devm_kstrdupasbuh1hhjFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hgfph]hgfp}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubeh}(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)}(hFAllocate resource managed space and copy an existing string into that.h]hFAllocate resource managed space and copy an existing string into that.}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM,hjGhhubah}(h]h ]h"]h$]h&]uh1j3hjEhhhjEhM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"GjHj"GjIjJjKuh1hhhhj{hNhNubj)}(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)}(hj,Gh]h Parameters}(hj.GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Gubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM0hj&Gubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjKGh]hstruct device *dev}(hjMGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM.hjEGubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjdGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`GhM.hjaGubah}(h]h ]h"]h$]h&]uh1jhjEGubeh}(h]h ]h"]h$]h&]uh1jhj`GhM.hjBGubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hjGh]h const char *s}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM/hj~Gubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhM/hjGubah}(h]h ]h"]h$]h&]uh1jhj~Gubeh}(h]h ]h"]h$]h&]uh1jhjGhM/hjBGubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hjGh]h gfp_t gfp}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM1hjGubj)}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM0hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM1hjBGubeh}(h]h ]h"]h$]h&]uh1jhj&GubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM3hj&GubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM2hj&Gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kstrdup_const (C function)c.devm_kstrdup_consthNtauh1hhj{hhhNhNubh)}(hhh](h)}(hNconst char * devm_kstrdup_const (struct device *dev, const char *s, gfp_t gfp)h]h)}(hLconst char *devm_kstrdup_const(struct device *dev, const char *s, gfp_t gfp)h](j?)}(hj h]hconst}(hj>HhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj:HhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM?ubjQ)}(h h]h }(hjLHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:HhhhjKHhM?ubj)}(hcharh]hchar}(hjZHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:HhhhjKHhM?ubjQ)}(h h]h }(hjhHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:HhhhjKHhM?ubj)}(hjh]h*}(hjvHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:HhhhjKHhM?ubh)}(hdevm_kstrdup_consth]j)}(hdevm_kstrdup_consth]hdevm_kstrdup_const}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:HhhhjKHhM?ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjHhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubh)}(hhh]j)}(hdeviceh]hdevice}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsjHsbc.devm_kstrdup_constasbuh1hhjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hdevh]hdev}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubj:)}(h const char *sh](j?)}(hj h]hconst}(hjIhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjIubjQ)}(h h]h }(hj"IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hcharh]hchar}(hj0IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hj>IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hjLIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjFh]hs}(hjYIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjtIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvImodnameN classnameNjwjz)}j}]jHc.devm_kstrdup_constasbuh1hhjmIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmIubj)}(hgfph]hgfp}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubeh}(h]h ]h"]h$]h&]jjuh1j3hj:HhhhjKHhM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6HhhhjKHhM?ubah}(h]j1Hah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKHhM?hj3Hhhubj4)}(hhh]jM)}(h/resource managed conditional string duplicationh]h/resource managed conditional string duplication}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM?hjIhhubah}(h]h ]h"]h$]h&]uh1j3hj3HhhhjKHhM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIjHjIjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMChjIubj)}(hhh](j)}(h@``struct device *dev`` device for which to duplicate the string h](j)}(h``struct device *dev``h]jS)}(hj Jh]hstruct device *dev}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Jubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM@hjJubj)}(hhh]jM)}(h(device for which to duplicate the stringh]h(device for which to duplicate the string}(hj$JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj JhM@hj!Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj JhM@hjJubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hjDJh]h const char *s}(hjFJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBJubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMAhj>Jubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hj]JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYJhMAhjZJubah}(h]h ]h"]h$]h&]uh1jhj>Jubeh}(h]h ]h"]h$]h&]uh1jhjYJhMAhjJubj)}(hM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj}Jh]h gfp_t gfp}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{Jubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMBhjwJubj)}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMBhjJubah}(h]h ]h"]h$]h&]uh1jhjwJubeh}(h]h ]h"]h$]h&]uh1jhjJhMBhjJubeh}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMDhjIubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMChjIubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMFhjIubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMGhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kvasprintf (C function)c.devm_kvasprintfhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hSchar * devm_kvasprintf (struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h]h)}(hQchar *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j)}(hcharh]hchar}(hj$KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj KhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMUubjQ)}(h h]h }(hj3KhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Khhhj2KhMUubj)}(hjh]h*}(hjAKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Khhhj2KhMUubh)}(hdevm_kvasprintfh]j)}(hdevm_kvasprintfh]hdevm_kvasprintf}(hjRKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKubah}(h]h ](jjeh"]h$]h&]jjuh1hhj Khhhj2KhMUubj4)}(h<(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjnKhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjjKubjQ)}(h h]h }(hj{KhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjKubh)}(hhh]j)}(hdeviceh]hdevice}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsjTKsbc.devm_kvasprintfasbuh1hhjjKubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjKubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjKubj)}(hdevh]hdev}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfKubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]jKc.devm_kvasprintfasbuh1hhjKubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj)}(hgfph]hgfp}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfKubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hj(LhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj$LubjQ)}(h h]h }(hj5LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$Lubj)}(hcharh]hchar}(hjCLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$LubjQ)}(h h]h }(hjQLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$Lubj)}(hjh]h*}(hj_LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Lubj)}(hfmth]hfmt}(hjlLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Lubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfKubj:)}(h va_list aph](h)}(hhh]j)}(hva_listh]hva_list}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]jKc.devm_kvasprintfasbuh1hhjLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(haph]hap}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfKubeh}(h]h ]h"]h$]h&]jjuh1j3hj Khhhj2KhMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhj2KhMUubah}(h]jKah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2KhMUhjKhhubj4)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMUhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhj2KhMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMYhjLubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjMh]hstruct device *dev}(hj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMWhjMubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj8MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4MhMWhj5Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj4MhMWhjMubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hjXMh]h gfp_t gfp}(hjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVMubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMYhjRMubj)}(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}(hjqMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMXhjnMubah}(h]h ]h"]h$]h&]uh1jhjRMubeh}(h]h ]h"]h$]h&]uh1jhjmMhMYhjMubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]jS)}(hjMh]hconst char *fmt}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMZhjMubj)}(hhh]jM)}(h The printf()-style format stringh]h The printf()-style format string}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMZhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMZhjMubj)}(h/``va_list ap`` Arguments for the format string h](j)}(h``va_list ap``h]jS)}(hjMh]h va_list ap}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM[hjMubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhM[hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM[hjMubeh}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h **Return**h]j)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM]hjLubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM\hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kasprintf (C function)c.devm_kasprintfhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hKchar * devm_kasprintf (struct device *dev, gfp_t gfp, const char *fmt, ...)h]h)}(hIchar *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j)}(hcharh]hchar}(hjKNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGNhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMuubjQ)}(h h]h }(hjZNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGNhhhjYNhMuubj)}(hjh]h*}(hjhNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGNhhhjYNhMuubh)}(hdevm_kasprintfh]j)}(hdevm_kasprintfh]hdevm_kasprintf}(hjyNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuNubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGNhhhjYNhMuubj4)}(h5(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjNhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubh)}(hhh]j)}(hdeviceh]hdevice}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsj{Nsbc.devm_kasprintfasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj OmodnameN classnameNjwjz)}j}]jNc.devm_kasprintfasbuh1hhjOubjQ)}(h h]h }(hj(OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hgfph]hgfp}(hj6OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hconst char *fmth](j?)}(hj h]hconst}(hjOOhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjKOubjQ)}(h h]h }(hj\OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKOubj)}(hcharh]hchar}(hjjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKOubjQ)}(h h]h }(hjxOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKOubj)}(hfmth]hfmt}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(h...h]j)}(hj h]h...}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjGNhhhjYNhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjCNhhhjYNhMuubah}(h]j>Nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYNhMuhj@Nhhubj4)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMuhjOhhubah}(h]h ]h"]h$]h&]uh1j3hj@NhhhjYNhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMyhjOubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjPh]hstruct device *dev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMwhjPubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj/PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+PhMwhj,Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj+PhMwhj Pubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hjOPh]h gfp_t gfp}(hjQPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMyhjIPubj)}(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}(hjhPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMxhjePubah}(h]h ]h"]h$]h&]uh1jhjIPubeh}(h]h ]h"]h$]h&]uh1jhjdPhMyhj Pubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]jS)}(hjPh]hconst char *fmt}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMzhjPubj)}(hhh]jM)}(h The printf()-style format stringh]h The printf()-style format string}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMzhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMzhj Pubj)}(h(``...`` Arguments for the format string h](j)}(h``...``h]jS)}(hjPh]h...}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM{hjPubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM{hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM{hj Pubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h **Return**h]j)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM}hjOubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM|hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kfree (C function) c.devm_kfreehNtauh1hhj{hhhNhNubh)}(hhh](h)}(h3void devm_kfree (struct device *dev, const void *p)h]h)}(h2void devm_kfree(struct device *dev, const void *p)h](j)}(hvoidh]hvoid}(hjBQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>QhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjQQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>QhhhjPQhMubh)}(h devm_kfreeh]j)}(h devm_kfreeh]h devm_kfree}(hjcQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Qubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>QhhhjPQhMubj4)}(h#(struct device *dev, const void *p)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj{QubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{Qubh)}(hhh]j)}(hdeviceh]hdevice}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjeQsb c.devm_kfreeasbuh1hhj{QubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{Qubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Qubj)}(hdevh]hdev}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwQubj:)}(h const void *ph](j?)}(hj h]hconst}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hvoidh]hvoid}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hj(RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hp}(hj5RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwQubeh}(h]h ]h"]h$]h&]jjuh1j3hj>QhhhjPQhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj:QhhhjPQhMubah}(h]j5Qah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPQhMhj7Qhhubj4)}(hhh]jM)}(hResource-managed kfreeh]hResource-managed kfree}(hj^RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj[Rhhubah}(h]h ]h"]h$]h&]uh1j3hj7QhhhjPQhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvRjHjvRjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Rubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjzRubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjRh]hstruct device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjRubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubj)}(h!``const void *p`` Memory to free h](j)}(h``const void *p``h]jS)}(hjRh]h const void *p}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjRubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubeh}(h]h ]h"]h$]h&]uh1jhjzRubjM)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjzRubjM)}(h*Free memory allocated with devm_kmalloc().h]h*Free memory allocated with devm_kmalloc().}(hj)ShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjzRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmemdup (C function)c.devm_kmemduphNtauh1hhj{hhhNhNubh)}(hhh](h)}(hPvoid * devm_kmemdup (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hNvoid *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjXShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTShhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjgShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTShhhjfShMubj)}(hjh]h*}(hjuShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTShhhjfShMubh)}(h devm_kmemduph]j)}(h devm_kmemduph]h devm_kmemdup}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjTShhhjfShMubj4)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjShhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubh)}(hhh]j)}(hdeviceh]hdevice}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjSsbc.devm_kmemdupasbuh1hhjSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hdevh]hdev}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(hconst void *srch](j?)}(hj h]hconst}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hj!ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hvoidh]hvoid}(hj/ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjQ)}(h h]h }(hj=ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjKThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hsrch]hsrc}(hjXThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjtThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvTmodnameN classnameNjwjz)}j}]jSc.devm_kmemdupasbuh1hhjmTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmTubj)}(hlenh]hlen}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]jSc.devm_kmemdupasbuh1hhjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hgfph]hgfp}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubeh}(h]h ]h"]h$]h&]jjuh1j3hjTShhhjfShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPShhhjfShMubah}(h]jKSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjfShMhjMShhubj4)}(hhh]jM)}(hResource-managed kmemduph]hResource-managed kmemdup}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjMShhhjfShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*UjHj*UjIjJjKuh1hhhhj{hNhNubj)}(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)}(hj4Uh]h Parameters}(hj6UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Uubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj.Uubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjSUh]hstruct device *dev}(hjUUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjMUubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjlUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhUhMhjiUubah}(h]h ]h"]h$]h&]uh1jhjMUubeh}(h]h ]h"]h$]h&]uh1jhjhUhMhjJUubj)}(h/``const void *src`` Memory region to duplicate h](j)}(h``const void *src``h]jS)}(hjUh]hconst void *src}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjUubj)}(hhh]jM)}(hMemory region to duplicateh]hMemory region to duplicate}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjJUubj)}(h$``size_t len`` Memory region length h](j)}(h``size_t len``h]jS)}(hjUh]h size_t len}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjUubj)}(hhh]jM)}(hMemory region lengthh]hMemory region length}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjJUubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hjUh]h gfp_t gfp}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjUubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjJUubeh}(h]h ]h"]h$]h&]uh1jhj.UubjM)}(h**Description**h]j)}(hj9Vh]h Description}(hj;VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Vubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj.UubjM)}(h;Duplicate region of a memory using resource managed kmalloch]h;Duplicate region of a memory using resource managed kmalloc}(hjOVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj.Uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmemdup_const (C function)c.devm_kmemdup_consthNtauh1hhj{hhhNhNubh)}(hhh](h)}(h\const void * devm_kmemdup_const (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hZconst void *devm_kmemdup_const(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j?)}(hj h]hconst}(hj~VhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjzVhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzVhhhjVhMubj)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzVhhhjVhMubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzVhhhjVhMubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzVhhhjVhMubh)}(hdevm_kmemdup_consth]j)}(hdevm_kmemdup_consth]hdevm_kmemdup_const}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzVhhhjVhMubj4)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjVubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubh)}(hhh]j)}(hdeviceh]hdevice}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjVsbc.devm_kmemdup_constasbuh1hhjVubjQ)}(h h]h }(hj!WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hj/WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hdevh]hdev}(hjhjQWubjQ)}(h h]h }(hjbWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQWubj)}(hvoidh]hvoid}(hjpWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQWubjQ)}(h h]h }(hj~WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQWubj)}(hsrch]hsrc}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]jWc.devm_kmemdup_constasbuh1hhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hlenh]hlen}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]jWc.devm_kmemdup_constasbuh1hhjWubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hgfph]hgfp}(hj)XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubeh}(h]h ]h"]h$]h&]jjuh1j3hjzVhhhjVhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvVhhhjVhMubah}(h]jqVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjVhMhjsVhhubj4)}(hhh]jM)}(h5conditionally duplicate and manage a region of memoryh]h5conditionally duplicate and manage a region of memory}(hjSXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjPXhhubah}(h]h ]h"]h$]h&]uh1j3hjsVhhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkXjHjkXjIjJjKuh1hhhhj{hNhNubj)}(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)}(hjuXh]h Parameters}(hjwXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsXubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjoXubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjXh]hstruct device *dev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjXubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubj)}(h/``const void *src`` memory region to duplicate h](j)}(h``const void *src``h]jS)}(hjXh]hconst void *src}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjXubj)}(hhh]jM)}(hmemory region to duplicateh]hmemory region to duplicate}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubj)}(h%``size_t len`` memory region length, h](j)}(h``size_t len``h]jS)}(hjYh]h size_t len}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjYubj)}(hhh]jM)}(hmemory region length,h]hmemory region length,}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjXubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hj?Yh]h gfp_t gfp}(hjAYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=Yubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj9Yubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hjXYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjTYhMhjUYubah}(h]h ]h"]h$]h&]uh1jhj9Yubeh}(h]h ]h"]h$]h&]uh1jhjTYhMhjXubeh}(h]h ]h"]h$]h&]uh1jhjoXubjM)}(h **Return**h]j)}(hjzYh]hReturn}(hj|YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxYubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjoXubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjoXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devm_get_free_pages (C function)c.devm_get_free_pageshNtauh1hhj{hhhNhNubh)}(hhh](h)}(hZunsigned long devm_get_free_pages (struct device *dev, gfp_t gfp_mask, unsigned int order)h]h)}(hYunsigned long devm_get_free_pages(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMubj)}(hlongh]hlong}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMubh)}(hdevm_get_free_pagesh]j)}(hdevm_get_free_pagesh]hdevm_get_free_pages}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMubj4)}(h8(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjZhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjZubjQ)}(h h]h }(hj%ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubh)}(hhh]j)}(hdeviceh]hdevice}(hj6ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8ZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.devm_get_free_pagesasbuh1hhjZubjQ)}(h h]h }(hjVZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjdZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hdevh]hdev}(hjqZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(hgfp_t gfp_maskh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]jRZc.devm_get_free_pagesasbuh1hhjZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hgfp_maskh]hgfp_mask}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(horderh]horder}(hj [hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubeh}(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!Resource-managed __get_free_pagesh]h!Resource-managed __get_free_pages}(hj4[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj1[hhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjL[jHjL[jIjJjKuh1hhhhj{hNhNubj)}(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)}(hjV[h]h Parameters}(hjX[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT[ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjP[ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hju[h]hstruct device *dev}(hjw[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjs[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjo[ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhjo[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjl[ubj)}(h(``gfp_t gfp_mask`` Allocation gfp flags 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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj[ubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhXlj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjl[ubj)}(h=``unsigned int order`` Allocation size is (1 << order) pages h](j)}(h``unsigned int order``h]jS)}(hj[h]hunsigned int order}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj[ubj)}(hhh]jM)}(h%Allocation size is (1 << order) pagesh]h%Allocation size is (1 << order) pages}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjl[ubeh}(h]h ]h"]h$]h&]uh1jhjP[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:149: ./drivers/base/devres.chMhjP[ubjM)}(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.}(hj8\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjP[ubjM)}(h **Return**h]j)}(hjI\h]hReturn}(hjK\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG\ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjP[ubjM)}(h5Address of allocated memory on success, 0 on failure.h]h5Address of allocated memory on success, 0 on failure.}(hj_\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhjP[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_free_pages (C function)c.devm_free_pageshNtauh1hhj{hhhNhNubh)}(hhh](h)}(h=void devm_free_pages (struct device *dev, unsigned long addr)h]h)}(hhj\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_free_pagesasbuh1hhj\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:)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj=]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubjQ)}(h h]h }(hjK]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9]ubj)}(hlongh]hlong}(hjY]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubjQ)}(h h]h }(hjg]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9]ubj)}(haddrh]haddr}(hju]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]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)}(hResource-managed free_pagesh]hResource-managed free_pages}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM hj]hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhj\hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./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:149: ./drivers/base/devres.chM hj]ubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(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&``unsigned long addr`` Memory to free h](j)}(h``unsigned long addr``h]jS)}(hj^h]hunsigned long addr}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM hj^ubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hj2^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)}(hjT^h]h Description}(hjV^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR^ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chMhj]ubjM)}(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 }(hjj^hhhNhNubj)}(h **order**h]horder}(hjr^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj^ubh.}(hjj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __devm_alloc_percpu (C function)c.__devm_alloc_percpuhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hSvoid __percpu * __devm_alloc_percpu (struct device *dev, size_t size, size_t align)h]h)}(hQvoid __percpu *__devm_alloc_percpu(struct device *dev, size_t size, size_t align)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM#ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj^hM#ubh__percpu}(hj^hhhNhNubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj^hM#ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hM#ubh)}(h__devm_alloc_percpuh]j)}(h__devm_alloc_percpuh]h__devm_alloc_percpu}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^hhhj^hM#ubj4)}(h/(struct device *dev, size_t size, size_t align)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_alloc_percpuasbuh1hhj_ubjQ)}(h h]h }(hjE_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjS_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 size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj|_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~_modnameN classnameNjwjz)}j}]jA_c.__devm_alloc_percpuasbuh1hhju_ubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhju_ubj)}(hsizeh]hsize}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubj:)}(h size_t alignh](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}]jA_c.__devm_alloc_percpuasbuh1hhj_ubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(halignh]halign}(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)}(hResource-managed alloc_percpuh]hResource-managed alloc_percpu}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM#hj`hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhj^hM#ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2`jHj2`jIjJjKuh1hhhhj{hNhNubj)}(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)}(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:149: ./drivers/base/devres.chM'hj6`ubj)}(hhh](j)}(h=``struct device *dev`` Device to allocate per-cpu memory for h](j)}(h``struct device *dev``h]jS)}(hj[`h]hstruct device *dev}(hj]`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM$hjU`ubj)}(hhh]jM)}(h%Device to allocate per-cpu memory forh]h%Device to allocate per-cpu memory for}(hjt`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjp`hM$hjq`ubah}(h]h ]h"]h$]h&]uh1jhjU`ubeh}(h]h ]h"]h$]h&]uh1jhjp`hM$hjR`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:149: ./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%hjR`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:149: ./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&hjR`ubeh}(h]h ]h"]h$]h&]uh1jhj6`ubjM)}(h**Description**h]j)}(hjah]h Description}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM(hj6`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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM'hj6`ubjM)}(h **Return**h]j)}(hj/ah]hReturn}(hj1ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-aubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM*hj6`ubjM)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjEahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:149: ./drivers/base/devres.chM+hj6`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubeh}(h]device-resource-managementah ]h"]device resource managementah$]h&]uh1hhhhhhhhKubeh}(h] driver-basicsah ]h"] driver basicsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjaerror_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}(jhajeajmjjjjjPHjMHjjjMjJjDjDjjjjjjjjjxjuj`aj]au nametypes}(jhajmjjPHjjMjDjjjjjxj`auh}(jeahjjhhhj'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]jjjUjZjjjjjjjAjFjrjwjjjjjjj6j;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/jjjjjjjYj^jjjjjjjjjjjjjxj}jjjjj'j,jjj j j j j j jjjjjjjjjjjjjjj"j'jrjwj j j#j#jb%jg%j'j'j*j*jR,jW,j.j.j0j0j03j53j5j5j7j7j :j%:jp<ju<j>j>jAjAj`CjeCjEj$EjFjFjHjHjJjJjcLjhLj4Nj9NjPj PjQjQjSjSjfUjkUj7WjjCjjj*j/jjj_jdjC jH j' j, j j jjjjjjjjjjj>jCj"j'jj jjjjj!j!j#j#jz%j%j^'jc'j)j)j%,j*,j.j.j1j1j3j3j5j5jN8jS8j:j:j:=j?=j?j?jBjBjwDj|DjFjFjcIjhIjKjKj*Nj/NjPjPjSjSjUjUjXjXjgZjlZj\j\j1_j6_jajajdjdjgjgjjjjjnj njMqjRqjtjtjwjwj"{j'{j}j}jjjjjj jjj jjjjjjjjj jjj,j1jFjKj j%jjj&j+jRjWjjjjj0j5jjjЭjխj j%jpjujjŴjjjNjSjjjjj>jCjjjjj.j3j~jjjjjj^jcj/j4jjjjjjjsjxjDjIjjjjjjjvj{jGjLjjjjjjjjj\jajjjjj:j?jjjjjjjhjmjjjj jXj]jjjjj6 j; j j jjjjjdjijjjj jTjYjjjjj!j!jP#jU#j3&j8&j)j)j+j+j.j.j1j2j5j#5j?8jD8j`;je;j=j=j?j?jAjAjDj#DjFjFjHjIjkKjpKj^NjcNjpQjuQjSjSjUjUjWjWjYjYj[j[jg]jl]j_j_jajajcjdjMfjRfjhjhjjjjj=mjBmjojojqjqj-tj2tj}vjvjxjxj {j{j[}j`}jjjjjKjPjjjjj;j@jjjˎjЎjjjmjrj>jCjjjjjjjjjAjFjjjjjjjjjVj[j'j,jjjɫjΫjj jWj\jjjjjGjLjjjջjڻj%j*jujzjjjjjSjXjjjjjCjHjjjjj!j&jqjvjjjjj?jDj~jjjjjjjjfjkjIjNjjjojjjjjjj<jAj,j1jj!jjjjjijnj j j j jjjjjj jjj j%j jjjj9j>jx!j}!j#j#j?&jD&j(j(j++j0+j-j-j0j0j2j2j5j5jy7j~7j9j9j@<jE<j>j>j,Aj1AjCjCjFjFjHjHjKj KjzMjMj9Oj>OjQj"QjSjSjTjTjVjVjXjXjZjZju\jz\jY^j^^j`j`jajbjcjcjejejgjgjijijpkjukjTmjYmj8oj=ojqjqjsjtjuvjzvjxjxja{jf{j}j}j(j-jjjjjjjۉjjQjVjǎj̎j=jBjjjj jzjjjjfjkjܟjjAjFjjj jjpjujjjjjIJjɲjjj'j,jnjsjjjjj~jjnjsj^jcjjjbjgjjjfjkjjjjjjjjjj j j%jjjjjjj,j1jjjojjj jjZj_jjjjjJjOjjjjj(j-jxj}jjjjjh jm j j jj jXj]jjjgjlj8j=j jjjjjj|jjM jR j"j#"j#j#j%j%j'j'jP)jU)j!+j&+j,j,j.j.j0j0je2jj2j64j;4jt6jy6j8j8j;j;jd=ji=j?j?jAjAjBDjGDjFjFjHjHj2Kj7KjpMjuMjOjOjRjRj`TjeTjVjVjXjXj>[jC[j]j]j_j_j.bj3bjmdjrdjfjfjhjhj*kj/kj njnjpjpjsjsjvjvjyjyj|j|jjj:j?jjjjjjjjjgjlj֐jېjEjJj8j=jJjOj^jcjrjwjjjjjjjjjJjOjjjdjijHjMj_jdjcjhjjjzjjjj\jajܼjj6j;jjjjjjjjjujj!j&jjjj jjjjj,j1jIjNjjjj jjjjjjjxj}jjjojtjjjjj jjjjjjjjhjmjLjQjvj{jjjjjjjfjkjjj}jjjjjj1j6jjjjj_jdjjjjj.j3jjjjjM jR j j j j j]aj{jjjOjTjjj jj>jCjjj>"jC"j%j%j4)j9)j,j,j/j/j1j1j3j3j!6j&6j9j9j<j<j?j?jnBjsBjEjEj1Hj6HjKjKj>NjCNj5Qj:QjKSjPSjqVjvVjYjYj\j\j^j^u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjaubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKXsourcejuh1jahj-ubatransform_messages] transformerN include_log] decorationNhhub.